Esempio n. 1
0
 def _match_token(self, token, data, ini):
     pos = ini
     if self.parse_state[token] >= 0:
         end = len(BogusDeserializer.tokens[token])
         if end > len(data) - ini + self.parse_state[token]:
             end = len(data) - ini + self.parse_state[token]
         text = BogusDeserializer.tokens[token][self.parse_state[token]:end]
         if data[ini:ini + end - self.parse_state[token]] == text:
             pos = ini + end - self.parse_state[token]
             self.parse_state[token] = end
             if self.parse_state[token] == \
                     len(BogusDeserializer.tokens[token]):
                 self.parse_state = [-1, -1, -1]
                 self.parse_state[token] = -2
         else:
             self.parse_state[token] = -1
     if token == 0 and self.parse_state[0] == -2:
         end = data.find('\n', pos)
         if end == -1:
             self.param_data += data[pos:]
         else:
             self.param_data += data[pos:end]
             parts = self.param_data.split('/')
             self.reset()
             return int(parts[0]), float(parts[1])
     elif token == 1 and self.parse_state[1] == -2:
         self.reset()
         self.consumed_data = pos
         return events.Command('', 'ztreamy-command',
                               'Event-Source-Finished')
     elif token == 2 and self.parse_state[2] == -2:
         self.reset()
         self.consumed_data = pos
         return events.Command('', 'ztreamy-command', 'Set-Compression')
     return None
Esempio n. 2
0
 def _send_closing_event(self):
     #        time.sleep(0.5)
     event = events.Command(self.source_id, 'ztreamy-command',
                            'Event-Source-Finished')
     pub = EventPublisher(event, self.publishers, add_timestamp=False)
     self._pending_events.append(pub)
     pub.publish()
Esempio n. 3
0
 def _send_init_event(self):
     event = events.Command(self.source_id, 'ztreamy-command',
                            'Event-Source-Started')
     pub = EventPublisher(event, self.publishers, add_timestamp=False)
     self._pending_events.append(pub)
     self.io_loop.add_timeout(time.time() + self.initial_delay, pub.publish)
Esempio n. 4
0
 def dispatch(self, evs):
     num_clients = (len(self.streaming_clients) +
                    len(self.one_time_clients) +
                    len(self.unsynced_compressed_streaming_clients) +
                    len(self.compressed_streaming_clients) +
                    len(self.local_clients))
     logging.info('Sending %r events to %r clients', len(evs), num_clients)
     self.recent_events.append_events(evs)
     self._next_client_cleanup -= 1
     if self._next_client_cleanup == 0:
         self.clean_closed_clients()
     if isinstance(evs, list):
         if evs == []:
             self._periods_since_last_event += 1
             if self._periods_since_last_event > 20 and self._auto_finish:
                 logger.logger.server_closed(num_clients)
                 self.close()
                 self.ioloop.stop()
             # Use the following line for the experiments
             ## if False:
             elif ((num_clients > 0 or len(self.priority_clients) > 0)
                   and self._periods_since_last_event > 20):
                 logging.info('Sending Test-Connection event')
                 evs = [
                     events.Command('', 'ztreamy-command',
                                    'Test-Connection')
                 ]
                 self._periods_since_last_event = 0
                 self.dispatch_priority(evs)
             else:
                 return
     else:
         raise ZtreamyException('Bad event type', 'send_event')
     self._periods_since_last_event = 0
     if len(self.unsynced_compressed_streaming_clients) > 0:
         if (len(self.compressed_streaming_clients) == 0
                 or self._num_events_since_sync > param_max_events_sync):
             self._sync_compressor()
     if num_clients > 0:
         logging.info('Compressed clients: %d synced; %d unsynced'%\
                          (len(self.compressed_streaming_clients),
                           len(self.unsynced_compressed_streaming_clients)))
         serialized = ztreamy.serialize_events(evs)
         for client in self.streaming_clients:
             self._send(serialized, client)
         for client in self.unsynced_compressed_streaming_clients:
             self._send(serialized, client)
         for client in self.local_clients:
             if not client.closed:
                 client._send_events(evs)
         for client in self.one_time_clients:
             self._send(serialized, client)
             client.close()
         if len(self.compressed_streaming_clients) > 0:
             compressed_data = (self._compressor.compress(serialized) +
                                self._compressor.flush(zlib.Z_SYNC_FLUSH))
             for client in self.compressed_streaming_clients:
                 self._send(compressed_data, client)
         for e in evs:
             logger.logger.event_dispatched(e)
     self.one_time_clients = []
     self._num_events_since_sync += len(evs)