77 |
$list; |
$list; |
78 |
} |
} |
79 |
|
|
80 |
|
sub listChannelsUsingTemplate { |
81 |
|
my $class=shift; |
82 |
|
my $template=shift; |
83 |
|
|
84 |
|
return '' unless(defined($template) && $template ne ''); |
85 |
|
|
86 |
|
my $list=''; |
87 |
|
foreach my $channelName (sort keys %Channels) |
88 |
|
{ |
89 |
|
my $channel=$Channels{$channelName}; |
90 |
|
|
91 |
|
$list.=$channel->descriptionWithTemplate($template); |
92 |
|
} |
93 |
|
|
94 |
|
$list; |
95 |
|
} |
96 |
|
|
97 |
sub deleteChannel { |
sub deleteChannel { |
98 |
my $class=shift; |
my $class=shift; |
99 |
my $channelName=shift; |
my $channelName=shift; |
169 |
my $subscriber=shift; |
my $subscriber=shift; |
170 |
my $startId=shift; |
my $startId=shift; |
171 |
my $persist=shift; |
my $persist=shift; |
172 |
|
my $mode=shift || ''; |
173 |
|
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 |
|
|
181 |
my $startIndex=$self->indexForMessageID($startId); |
&::syslog('info','', |
182 |
|
'joinchannel', |
183 |
|
$subscriber->{'subscriberID'}, |
184 |
|
$self->{'name'}, |
185 |
|
$mode, |
186 |
|
$logStartIndex, |
187 |
|
$userAgent |
188 |
|
); |
189 |
|
|
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 |
my $numMsgToSend=0; |
if($startIndex<$msgCount) { |
198 |
while($startIndex<$msgCount) |
$subscriber->sendMessages(@{$self->{'messages'}}[$startIndex..$msgCount-1]); |
|
{ |
|
|
my $message=$self->{'messages'}->[$startIndex++]; |
|
|
|
|
|
$txt.=$message->message(); |
|
|
$numMsgToSend++; |
|
199 |
} |
} |
|
|
|
|
$subscriber->sendMessage($txt,$numMsgToSend); |
|
200 |
} |
} |
201 |
|
|
202 |
sub removeSubscriber { |
sub removeSubscriber { |
203 |
my $self=shift; |
my $self=shift; |
204 |
my $subscriber=shift; |
my $subscriber=shift; |
205 |
|
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 |
{ |
{ |
218 |
if(defined($idx)) |
if(defined($idx)) |
219 |
{ |
{ |
220 |
splice(@{$self->{'subscribers'}},$idx,1); |
splice(@{$self->{'subscribers'}},$idx,1); |
221 |
|
|
222 |
|
my $timeConnected = time - $subscriber->{'ConnectionStart'}; |
223 |
|
&::syslog('info','', |
224 |
|
'leavechannel', |
225 |
|
$subscriber->{'subscriberID'}, |
226 |
|
$self->{'name'}, |
227 |
|
$timeConnected, |
228 |
|
$subscriber->{'MessageCount'}, |
229 |
|
$subscriber->{'bytesWritten'}, |
230 |
|
$reason |
231 |
|
); |
232 |
} |
} |
233 |
|
|
234 |
$self->checkExpiration(); |
$self->checkExpiration(); |
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 |
|
|
255 |
my $text=$message->message(); |
map { $_->sendMessages($message) } @{$self->{'subscribers'}}; |
256 |
map { $_->sendMessage($text) } @{$self->{'subscribers'}}; |
|
257 |
|
$message; |
258 |
} |
} |
259 |
|
|
260 |
sub messageCount { |
sub messageCount { |
319 |
# |
# |
320 |
return undef unless(defined($id)); |
return undef unless(defined($id)); |
321 |
|
|
322 |
my $numMessages=scalar(scalar(@{$self->{'messages'}})); |
my $numMessages=scalar(@{$self->{'messages'}}); |
323 |
|
|
324 |
return undef unless($numMessages); |
return undef unless($numMessages); |
325 |
return -1 unless($id ne ''); |
return -1 unless($id ne ''); |
354 |
return $low; |
return $low; |
355 |
} |
} |
356 |
|
|
357 |
|
sub lastMsgID { |
358 |
|
my $self=shift; |
359 |
|
my $numMessages=scalar(@{$self->{'messages'}}); |
360 |
|
return undef unless($numMessages>0); |
361 |
|
@{$self->{'messages'}}[-1]->id(); |
362 |
|
} |
363 |
|
|
364 |
|
sub descriptionWithTemplate { |
365 |
|
my $self=shift; |
366 |
|
my $template=shift; |
367 |
|
|
368 |
|
$template=~s/~([a-zA-Z0-9_]*)~/ |
369 |
|
if(!defined($1) || $1 eq '') { |
370 |
|
'~'; |
371 |
|
} elsif($1 eq 'messageCount') { |
372 |
|
$self->messageCount(); |
373 |
|
} elsif($1 eq 'subscriberCount') { |
374 |
|
$self->subscriberCount(); |
375 |
|
} elsif($1 eq 'lastMsgID') { |
376 |
|
$self->lastMsgID(); |
377 |
|
} elsif($1 eq 'name') { |
378 |
|
$self->{'name'}; |
379 |
|
} else { |
380 |
|
''; |
381 |
|
} |
382 |
|
/gex; |
383 |
|
|
384 |
|
$template; |
385 |
|
} |
386 |
|
|
387 |
1; |
1; |
388 |
############################################################################EOF |
############################################################################EOF |