Create a Class that will be used a receive handler Args: game: The game the receive handler should operate on dockers: A map of the docker files with the key being use_docker: if True sleep and wake with docker otherwise don't use docker. Useful
(game: Game, dockers, use_docker: bool,
is_unix_stream: bool)
| 317 | |
| 318 | |
| 319 | def create_receive_handler(game: Game, dockers, use_docker: bool, |
| 320 | is_unix_stream: bool) \ |
| 321 | -> socketserver.BaseRequestHandler: |
| 322 | ''' |
| 323 | Create a Class that will be used a receive handler |
| 324 | |
| 325 | Args: |
| 326 | game: The game the receive handler should operate on |
| 327 | dockers: A map of the docker files with the key being |
| 328 | use_docker: if True sleep and wake with docker otherwise don't use |
| 329 | docker. Useful for testing the socket server |
| 330 | Return: |
| 331 | A ReceiveHandler class |
| 332 | ''' |
| 333 | class ReceiveHandler(socketserver.BaseRequestHandler): |
| 334 | ''' |
| 335 | This class overrides the default handling method in socketServer, so it |
| 336 | calls what we want |
| 337 | ''' |
| 338 | |
| 339 | def __init__(self, *args, **kwargs): |
| 340 | ''' |
| 341 | Hidden init |
| 342 | ''' |
| 343 | self.game = game |
| 344 | self.dockers = dockers |
| 345 | self.client_id = 0 |
| 346 | self.error = "" |
| 347 | self.logged_in = False |
| 348 | self.is_unix_stream = is_unix_stream |
| 349 | self.buffer_small = b'' |
| 350 | self.buffer_large = [] |
| 351 | |
| 352 | super(ReceiveHandler, self).__init__(*args, **kwargs) |
| 353 | |
| 354 | def read_line(self): |
| 355 | while True: |
| 356 | if self.buffer_small: |
| 357 | pos = self.buffer_small.find(b'\n') |
| 358 | if pos != -1: |
| 359 | ret = b''.join(self.buffer_large) + self.buffer_small[:pos] |
| 360 | self.buffer_small = self.buffer_small[pos+1:] |
| 361 | self.buffer_large = [] |
| 362 | return ret |
| 363 | else: |
| 364 | self.buffer_large.append(self.buffer_small) |
| 365 | self.buffer_small = self.request.recv(4096) |
| 366 | if not self.buffer_small: |
| 367 | raise IOError("reached socket EOF before finding newline") |
| 368 | |
| 369 | def get_next_message(self) -> object: |
| 370 | ''' |
| 371 | Returns the json loaded object of the next string that is sent over the |
| 372 | socket |
| 373 | |
| 374 | Returns: |
| 375 | An object, for our purposes this will be a dictionary, of the json |
| 376 | loaded string |
no outgoing calls
no test coverage detected