POE-Component-Server-IRC

 view release on metacpan or  search on metacpan

lib/POE/Component/Server/IRC.pm  view on Meta::CPAN

        if (!$self->_state_sid_serv($prefix) && $prefix ne $sid) {
            last SWITCH;
        }
        if (!$count || $count < 2) {
            last SWITCH;
        }
        my $client = shift @$args;
        my $uid = $self->state_user_uid($client);
        last SWITCH if !$uid;
        last SWITCH if $args->[0] !~ m!^\d+$!;
        last SWITCH if $args->[0] != $self->{state}{uids}{$uid}{ts};
        if ( $uid =~ m!^$sid! ) {
           my $rec = $self->{state}{uids}{$uid};
           my $reason = 'SVSKilled: ';
           if ( $count == 3 ) {
              $reason .= pop @$args;
           }
           else {
              $reason .= '<No reason supplied>';
           }
           $self->_terminate_conn_error(
                $rec->{route_id},
                $reason,
           );
           last SWITCH;
        }
        my $route_id = $self->_state_uid_route($uid);
        if ( $route_id eq $peer_id ) {
          # The fuck
          last SWITCH;
        }
        $self->send_output(
            {
                prefix  => $prefix,
                command => 'SVSKILL',
                params  => [
                    $client,
                    @$args,
                ],
            },
            $route_id,
        );
    }

    return @$ref if wantarray;
    return $ref;
}

sub _daemon_peer_svstag {
    my $self    = shift;
    my $peer_id = shift || return;
    my $prefix  = shift || return;
    my $sid     = $self->server_sid();
    my $ref     = [ ];
    my $args    = [ @_ ];
    my $count   = @$args;

    #      - parv[0] = nickname
    #      - parv[1] = TS
    #      - parv[2] = [-][raw]
    #      - parv[3] = required user mode(s) to see the tag
    #      - parv[4] = tag line

    SWITCH: {
        if (!$self->_state_sid_serv($prefix) && $prefix ne $sid) {
            last SWITCH;
        }
        if (!$count || $count < 2) {
            last SWITCH;
        }
        my $client = shift @$args;
        my $uid = $self->state_user_uid($client);
        last SWITCH if !$uid;
        last SWITCH if $args->[0] !~ m!^\d+$!;
        last SWITCH if $args->[0] != $self->{state}{uids}{$uid}{ts};
        my $rec = $self->{state}{uids}{$uid};
        if ( $args->[1] eq '-' ) {
            delete $rec->{svstags}{$_} for keys %{ $rec->{svstags} };
            $self->send_output(
                {
                    prefix  => $prefix,
                    command => 'SVSTAG',
                    params  => [
                        $uid,
                        $rec->{ts},
                        $args->[1],
                    ],
                },
                grep { $_ ne $peer_id } $self->_state_connected_peers(),
            );
            last SWITCH;
        }
        last SWITCH if $count < 5 || !$args->[3];
        $rec->{svstags}{$args->[1]} = {
            numeric => $args->[1],
            umodes  => $args->[2],
            tagline => $args->[3],
        };
        $self->send_output(
            {
                prefix  => $prefix,
                command => 'SVSTAG',
                params  => [
                    $uid,
                    $rec->{ts},
                    $args->[1],
                    $args->[2],
                    $args->[3],
                ],
            },
            grep { $_ ne $peer_id } $self->_state_connected_peers(),
        );
    }

    return @$ref if wantarray;
    return $ref;
}

sub _state_create {
    my $self = shift;



( run in 2.465 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )