(self)
| 132 | return message_sent |
| 133 | |
| 134 | def tick(self): |
| 135 | global connections |
| 136 | global flush_pipes |
| 137 | next_packet_time = None |
| 138 | processed_messages = False |
| 139 | now = current_time() |
| 140 | try: |
| 141 | if self.next_message is None: |
| 142 | self.next_message = self.queue.get_nowait() |
| 143 | |
| 144 | # Accumulate bandwidth if an available packet/message was waiting since our last tick |
| 145 | if self.next_message is not None and self.kbps > .0 and self.next_message['time'] <= now: |
| 146 | elapsed = now - self.last_tick |
| 147 | accumulated_bytes = elapsed * self.kbps * 1000.0 / 8.0 |
| 148 | self.available_bytes += accumulated_bytes |
| 149 | |
| 150 | # process messages as long as the next message is sendable (latency or available bytes) |
| 151 | while (self.next_message is not None) and\ |
| 152 | (flush_pipes or ((self.next_message['time'] <= now) and |
| 153 | (self.kbps <= .0 or self.next_message['size'] <= self.available_bytes))): |
| 154 | processed_messages = True |
| 155 | message = self.next_message |
| 156 | self.next_message = None |
| 157 | if self.kbps > .0: |
| 158 | self.available_bytes -= message['size'] |
| 159 | try: |
| 160 | self.SendPeerMessage(message) |
| 161 | except: |
| 162 | pass |
| 163 | self.next_message = self.queue.get_nowait() |
| 164 | except Empty: |
| 165 | pass |
| 166 | except Exception as e: |
| 167 | logging.exception('Tick Exception') |
| 168 | |
| 169 | # Only accumulate bytes while we have messages that are ready to send |
| 170 | if self.next_message is None or self.next_message['time'] > now: |
| 171 | self.available_bytes = .0 |
| 172 | self.last_tick = now |
| 173 | |
| 174 | # Figure out how long until the next packet can be sent |
| 175 | if self.next_message is not None: |
| 176 | # First, just the latency |
| 177 | next_packet_time = self.next_message['time'] - now |
| 178 | # Additional time for bandwidth |
| 179 | if self.kbps > .0: |
| 180 | accumulated_bytes = self.available_bytes + next_packet_time * self.kbps * 1000.0 / 8.0 |
| 181 | needed_bytes = self.next_message['size'] - accumulated_bytes |
| 182 | if needed_bytes > 0: |
| 183 | needed_time = needed_bytes / (self.kbps * 1000.0 / 8.0) |
| 184 | next_packet_time += needed_time |
| 185 | |
| 186 | return next_packet_time |
| 187 | |
| 188 | |
| 189 | ######################################################################################################################## |
no test coverage detected