MCPcopy Create free account
hub / github.com/battlecode/battlecode-2018 / create_receive_handler

Function create_receive_handler

battlecode-manager/server.py:319–667  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

317
318
319def 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

Callers 2

start_serverFunction · 0.85
start_viewer_serverFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected