173 |
my $userAgent=shift || ''; |
my $userAgent=shift || ''; |
174 |
|
|
175 |
# Note: negative $startId means go back that many messages |
# Note: negative $startId means go back that many messages |
176 |
|
my $startIndex=$self->indexForMessageID($startId); |
177 |
|
my $logStartIndex = $startIndex || $self->lastMsgID() || 0; |
178 |
|
|
179 |
push(@{$self->{'subscribers'}},$subscriber) if($persist); |
push(@{$self->{'subscribers'}},$subscriber) if($persist); |
180 |
|
|
183 |
$subscriber->{'subscriberID'}, |
$subscriber->{'subscriberID'}, |
184 |
$self->{'name'}, |
$self->{'name'}, |
185 |
$mode, |
$mode, |
186 |
$startId, |
$logStartIndex, |
187 |
$userAgent |
$userAgent |
188 |
); |
); |
189 |
|
|
|
my $startIndex=$self->indexForMessageID($startId); |
|
190 |
return unless(defined($startIndex)); |
return unless(defined($startIndex)); |
191 |
|
|
192 |
my $msgCount=scalar(@{$self->{'messages'}}); |
my $msgCount=scalar(@{$self->{'messages'}}); |
194 |
|
|
195 |
$startIndex=0 if($startIndex<0); |
$startIndex=0 if($startIndex<0); |
196 |
|
|
197 |
if($startIndex<$msgCount) |
if($startIndex<$msgCount) { |
198 |
{ |
$subscriber->sendMessages(@{$self->{'messages'}}[$startIndex..$msgCount-1]); |
|
$subscriber->sendMessages(@{$self->{'messages'}}[$startIndex,$msgCount-1]); |
|
199 |
} |
} |
200 |
} |
} |
201 |
|
|
205 |
my $reason=shift ||'unknown'; |
my $reason=shift ||'unknown'; |
206 |
|
|
207 |
my $idx=undef; |
my $idx=undef; |
208 |
for(my $i=0;$i<scalar(@{$self->{'subscribers'}});$i++) |
my $numsubs = scalar(@{$self->{'subscribers'}}); |
209 |
|
for(my $i=0;$i<$numsubs;$i++) |
210 |
{ |
{ |
211 |
if($self->{'subscribers'}->[$i]==$subscriber) |
if($self->{'subscribers'}->[$i]==$subscriber) |
212 |
{ |
{ |
219 |
{ |
{ |
220 |
splice(@{$self->{'subscribers'}},$idx,1); |
splice(@{$self->{'subscribers'}},$idx,1); |
221 |
|
|
222 |
|
my $timeConnected = time - $subscriber->{'ConnectionStart'}; |
223 |
&::syslog('info','', |
&::syslog('info','', |
224 |
'leavechannel', |
'leavechannel', |
225 |
$subscriber->{'subscriberID'}, |
$subscriber->{'subscriberID'}, |
226 |
$self->{'name'}, |
$self->{'name'}, |
227 |
$subscriber->{'ConnectionStart'}, |
$timeConnected, |
228 |
$subscriber->{'MessageCount'}, |
$subscriber->{'MessageCount'}, |
229 |
$subscriber->{'bytesWritten'}, |
$subscriber->{'bytesWritten'}, |
230 |
$reason |
$reason |
248 |
$message->setText($messageText); |
$message->setText($messageText); |
249 |
$message->setChannelName($self->{'name'}); |
$message->setChannelName($self->{'name'}); |
250 |
push(@{$self->{'messages'}},$message); |
push(@{$self->{'messages'}},$message); |
251 |
|
&::syslog('debug',"New message ".$message->{"id"}." on channel ".$self->{'name'}); |
252 |
|
|
253 |
$self->trimMessageStoreBySize(); |
$self->trimMessageStoreBySize(); |
254 |
|
|
356 |
|
|
357 |
sub lastMsgID { |
sub lastMsgID { |
358 |
my $self=shift; |
my $self=shift; |
|
|
|
359 |
my $numMessages=scalar(@{$self->{'messages'}}); |
my $numMessages=scalar(@{$self->{'messages'}}); |
360 |
|
return undef unless($numMessages>0); |
|
return 'undefined' unless($numMessages>0); |
|
|
|
|
361 |
@{$self->{'messages'}}[-1]->id(); |
@{$self->{'messages'}}[-1]->id(); |
362 |
} |
} |
363 |
|
|
366 |
my $template=shift; |
my $template=shift; |
367 |
|
|
368 |
$template=~s/~([a-zA-Z0-9_]*)~/ |
$template=~s/~([a-zA-Z0-9_]*)~/ |
369 |
if(!defined($1) || $1 eq '') |
if(!defined($1) || $1 eq '') { |
|
{ |
|
370 |
'~'; |
'~'; |
371 |
} |
} elsif($1 eq 'messageCount') { |
|
elsif($1 eq 'messageCount') |
|
|
{ |
|
372 |
$self->messageCount(); |
$self->messageCount(); |
373 |
} |
} elsif($1 eq 'subscriberCount') { |
|
elsif($1 eq 'subscriberCount') |
|
|
{ |
|
374 |
$self->subscriberCount(); |
$self->subscriberCount(); |
375 |
} |
} elsif($1 eq 'lastMsgID') { |
|
elsif($1 eq 'lastMsgID') |
|
|
{ |
|
376 |
$self->lastMsgID(); |
$self->lastMsgID(); |
377 |
} |
} elsif($1 eq 'name') { |
378 |
|
$self->{'name'}; |
379 |
elsif(exists($self->{$1})) |
} else { |
|
{ |
|
|
$self->{$1}; |
|
|
} |
|
|
else |
|
|
{ |
|
380 |
''; |
''; |
381 |
} |
} |
382 |
/gex; |
/gex; |