📄 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 $cmd = $self->cmd; my $q=$oicq->{Command_Queue}; foreach my $e (@$queue) { if ($e->seq eq $seq) { #print "Dup packet seq:",unpack('n',$seq)," time:",time,"\n"; return 0;####dup packet } } foreach (@$q){ if($$_{Seq} eq unpack('n',$seq)){ $$_{Ack}=1; last;} } _add_to_queue($self, $queue); #print "Ack cmd:$cmd ","seq:",unpack('n',$seq)," and time:",time,"\n"; return $self->$cmd;}sub _add_to_queue { my ($self, $queue) = @_; unshift @$queue, $self; while(@$queue > $EventQueueSize) { pop @$queue };}1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -