/[meteor]/googlecode.com/svn/trunk/Meteor/Subscriber.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /googlecode.com/svn/trunk/Meteor/Subscriber.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 25 by knops.gerd, Sun May 20 19:40:53 2007 UTC revision 32 by andrew.betts, Thu Dec 20 21:24:24 2007 UTC
# Line 130  sub processLine { Line 130  sub processLine {
130                  # Analyze header, register with appropiate channel                  # Analyze header, register with appropiate channel
131                  # and send pending messages.                  # and send pending messages.
132                  #                  #
133                  # GET $::CONF{'SubscriberDynamicPageAddress'}?channel=ml123&restartfrom=1 HTTP/1.1                  # GET $::CONF{'SubscriberDynamicPageAddress'}/hostid/streamtype/channeldefs HTTP/1.1
134                  #                  #
135                  # Find the 'GET' line                  # Find the 'GET' line
136                  #                  #
137                  if($self->{'headerBuffer'}=~/GET\s+$::CONF{'SubscriberDynamicPageAddress'}\?(\S+)/)                  if($self->{'headerBuffer'}=~/GET\s+$::CONF{'SubscriberDynamicPageAddress'}\/([0-9a-z]+)\/([0-9a-z]+)\/(\S+)/i)
138                  {                  {
139                          my @formData=split('&',$1);                          my $subscriberID=$1;
140                          my $channelName=undef;                          my $persist=0;
141                          my $startIndex=undef;                          $self->{'mode'}=$2;
142                          my $backtrack=undef;                          if ($self->{'mode'} eq "xhrinteractive" || $self->{'mode'} eq "iframe" || $self->{'mode'} eq "serversent" || $self->{'mode'} eq "longpoll") {
143                          my $persist=1;                                  $persist=1;
144                          my $subscriberID=undef;                                  $self->{'MaxMessageCount'}=1 unless(!($self->{'mode'} eq "longpoll"));
145                            }
146                            if ($self->{'mode'} eq "iframe") {
147                                    $self->{'HeaderTemplateNumber'}=1;
148                            } else {
149                                    $self->{'HeaderTemplateNumber'}=2;
150                            }
151                            my @channelData=split('/',$3);
152                          my $channels={};                          my $channels={};
153                          foreach my $formElement (@formData)                          my $channelName;
154                            my $offset;
155                            foreach my $chandef (@channelData)
156                          {                          {
157                                  if($formElement=~/^channel=(.+)$/)                                  if($chandef=~/^([a-z0-9]+)(.(r|b|h)([0-9]*))?$/)
                                 {  
                                         if(defined($channelName))  
                                         {  
                                                 if(defined($startIndex) && defined($backtrack))  
                                                 {  
                                                         $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");  
                                                         $self->close();  
                                                           
                                                         return;  
                                                 }  
                                                   
                                                 $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));  
                                                 $channels->{$channelName}->{'startIndex'}=$startIndex;  
                                                   
                                                 $startIndex=undef;  
                                                 $backtrack=undef;  
                                         }  
                                         $channelName=$1;  
                                 }  
                                 elsif($formElement=~/^restartfrom=(\d*)$/)  
                                 {  
                                         $startIndex=$1;  
                                         $startIndex='' unless(defined($startIndex));  
                                 }  
                                 elsif($formElement=~/^backtrack=(\d+)$/)  
                                 {  
                                         $backtrack=$1;  
                                         $backtrack=0 unless(defined($backtrack));  
                                 }  
                                 elsif($formElement=~/^persist=(?i)(yes|true|1|no|false|0)$/)  
                                 {  
                                         $persist=0 if($1=~/(no|false|0)/i);  
                                 }  
                                 elsif($formElement=~/^id=(.+)$/)  
                                 {  
                                         $subscriberID=$1;  
                                 }  
                                 elsif($formElement=~/^maxmessages=(\d+)$/i)  
                                 {  
                                         $self->{'MaxMessageCount'}=$1;  
                                 }  
                                 elsif($formElement=~/^template=(\d+)$/i)  
                                 {  
                                         $self->{'HeaderTemplateNumber'}=$1;  
                                 }  
                                 elsif($formElement=~/^maxtime=(\d+)$/i)  
158                                  {                                  {
159                                          my $clientRequest=$1;                                          $channelName = $1;
160                                          my $serverDefault=$::CONF{'MaxTime'};                                          $channels->{$channelName}->{'startIndex'} = undef;
161                                                                                    for ($3) {
162                                          if($serverDefault==0 || $serverDefault>$clientRequest)                                                  $offset = $4;
163                                          {                                                  /r/ && do { $channels->{$channelName}->{'startIndex'} = $offset; last; };
164                                                  $self->{'ConnectionTimeLimit'}=$self->{'ConnectionStart'}+$clientRequest;                                                  /b/ && do { $channels->{$channelName}->{'startIndex'} = -$offset; last; };
165                                                    /h/ && do { $channels->{$channelName}->{'startIndex'} = 0; last; };
166                                          }                                          }
167                                  }                                  }
168                          }                          }
169                                                    
                         if(defined($channelName))  
                         {  
                                 if(defined($startIndex) && defined($backtrack))  
                                 {  
                                         $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");  
                                         $self->close();  
                                           
                                         return;  
                                 }  
                                   
                                 $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));  
                                 $channels->{$channelName}->{'startIndex'}=$startIndex;  
                         }  
                           
170                          delete($self->{'headerBuffer'});                          delete($self->{'headerBuffer'});
171                                                    
172                          if(defined($subscriberID) && $persist)                          if($persist)
173                          {                          {
174                                  $self->{'subscriberID'}=$subscriberID;                                  $self->{'subscriberID'}=$subscriberID;
175                                  $self->deleteSubscriberWithID($subscriberID);                                  $self->deleteSubscriberWithID($subscriberID);
# Line 229  sub processLine { Line 179  sub processLine {
179                          if(scalar(keys %{$channels}))                          if(scalar(keys %{$channels}))
180                          {                          {
181                                  $self->emitOKHeader();                                  $self->emitOKHeader();
                                   
182                                  $self->setChannels($channels,$persist);                                  $self->setChannels($channels,$persist);
                                   
183                                  $self->close(1) unless($persist);                                  $self->close(1) unless($persist);
                                   
184                                  return;                                  return;
185                          }                          }
186                  }                  }
187                    elsif($self->{'headerBuffer'}=~/GET\s+\/disconnect\/(\S+)/)
188                    {
189                            $self->deleteSubscriberWithID($1);
190                            $self->emitOKHeader();
191                            $self->close(1);
192                            return;
193                    }
194                  elsif($self->{'headerBuffer'}=~/GET\s+([^\s\?]+)/)                  elsif($self->{'headerBuffer'}=~/GET\s+([^\s\?]+)/)
195                  {                  {
196                          Meteor::Document->serveFileToClient($1,$self);                          Meteor::Document->serveFileToClient($1,$self);
                           
197                          $self->close(1);                          $self->close(1);
                           
198                          return;                          return;
199                  }                  }
200                                    

Legend:
Removed from v.25  
changed lines
  Added in v.32

  ViewVC Help
Powered by ViewVC 1.1.26