?? event.pm
字號:
package Net::OICQ::Event;# $Id: Event.pm,v 1.6 2003/10/17 20:01:52 tans Exp $# Copyright (c) 2003 Shufeng Tan. All rights reserved.# # This package is free software and is provided "as is" without express# or implied warranty. It may be used, redistributed and/or modified# under the terms of the Perl Artistic License (see# http://www.perl.com/perl/misc/Artistic.html)use 5.006;use strict;use warnings;eval "no encoding; use bytes;" if $] >= 5.008;use Net::OICQ;my %Cmd; # For looking up Cmd from CmdCodeforeach my $cmd (keys %Net::OICQ::CmdCode) { $Cmd{$Net::OICQ::CmdCode{$cmd}} = $cmd;}my $EventQueueSize = 50;sub new { my ($class, $packet, $oicq) = @_; my $self = { OICQ => $oicq, Header => $packet, }; return bless($self, $class);}sub src { substr(shift->{Header}, 1, 2)}sub cmdcode { substr(shift->{Header}, 3, 2)}sub seq { substr(shift->{Header}, 5, 2)}sub cmd { $Cmd{cmdcode(@_)} or 'unknown'}# $event->process() checks if an event is an ACK to a previous event,# or a duplicate to be ignored, or a new event to be added to the queuesub process { my ($self) = @_; my $oicq = $self->{OICQ}; my $queue = $oicq->{EventQueue}; my $src = $self->src; my $seq = $self->seq; my $cmdcode = $self->cmdcode; my $event; foreach my $e (@$queue) { if ($e->seq eq $seq && $e->cmdcode eq $cmdcode) { return if $e->src eq $src; $event = $e; last; } } if (! defined($event)) { # This event is not an ACK to any event in queue, add it to queue _add_to_queue($self, $queue); my $cmd = $self->cmd; return $self->$cmd; } if ($event->{Ack}) { # Duplicate packet such as recv_msg, recv_service_msg if ($oicq->{Debug}) { $oicq->log_t("Seq ", unpack('H*', $seq), " is a dupe, was ack'ed at ", substr(localtime($event->{Ack}), 4, 16)); } return; } else { if ($oicq->{Debug}) { $oicq->log_t('ACK Seq ', unpack('H*', $seq), ' Cmd ', unpack('H*', $cmdcode)); } $event->{Ack} = time; my $cmd = $self->cmd; return $self->$cmd; }}sub _add_to_queue { my ($self, $queue) = @_; $self->{Time} = time; $self->{Ack} = ''; unshift @$queue, $self; while(@$queue > $EventQueueSize) { pop @$queue };}1;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -