diff --git a/documentation/comprl.html b/documentation/comprl.html new file mode 100644 index 0000000..42fc001 --- /dev/null +++ b/documentation/comprl.html @@ -0,0 +1,234 @@ + + + + + + + comprl API documentation + + + + + + + + + +
+
+

+comprl

+ + + + + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/client.html b/documentation/comprl/client.html new file mode 100644 index 0000000..1f1ed3b --- /dev/null +++ b/documentation/comprl/client.html @@ -0,0 +1,250 @@ + + + + + + + comprl.client API documentation + + + + + + + + + +
+
+

+comprl.client

+ +

This module initializes the client package for the competition server.

+
+ + + + + +
1"""
+2This module initializes the client package for the competition server.
+3"""
+4
+5from .agent import Agent  # noqa: F401
+
+ + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/client/agent.html b/documentation/comprl/client/agent.html new file mode 100644 index 0000000..8f50210 --- /dev/null +++ b/documentation/comprl/client/agent.html @@ -0,0 +1,576 @@ + + + + + + + comprl.client.agent API documentation + + + + + + + + + +
+
+

+comprl.client.agent

+ +

This module contains the Agent class, used by the end-user connecting to the server.

+
+ + + + + +
 1"""
+ 2This module contains the Agent class, used by the end-user connecting to the server.
+ 3"""
+ 4
+ 5from typing import final
+ 6
+ 7
+ 8from comprl.client.interfaces import IAgent
+ 9from comprl.client import networking
+10
+11
+12class Agent(IAgent):
+13    """Agent used by the end-user connecting to the server.
+14
+15    This class represents an agent that interacts with the server. It provides methods
+16    for registering event handlers and connecting to the server.
+17    """
+18
+19    def __init__(self) -> None:
+20        super().__init__()
+21
+22    @final
+23    def event(self, func):
+24        """Decorator to register a function as an event handler.
+25
+26        Args:
+27            func (function): The function to be registered as an event handler.
+28
+29        Returns:
+30            function: The registered event handler function.
+31
+32        """
+33        setattr(self, func.__name__, func)
+34        return func
+35
+36    @final
+37    def run(self, token: str, host: str = "localhost", port: int = 65335) -> None:
+38        """Connects the client to the server.
+39
+40        This method connects the client to the server using the specified token, host,
+41        and port. It internally calls the `run` method of the base class to establish
+42        the connection.
+43
+44        Args:
+45            token (str): The token used for authentication.
+46            host (str): The host address of the server. Defaults to "localhost".
+47            port (int): The port number of the server. Defaults to 65335.
+48
+49        Returns:
+50            None
+51
+52        """
+53        super().run(token)
+54        networking.connect_agent(self, host, port)
+55
+56    def on_error(self, msg: str):
+57        """Called if an error occurred on the server side."""
+58        print(f"Error: {msg}")
+59
+60    def on_message(self, msg: str):
+61        """Called if a message is sent from the server."""
+62        print(f"Info: {msg}")
+63
+64    def on_disconnect(self):
+65        """Called when the agent disconnects from the server."""
+66        print("Error: Agent disconnected from the server.")
+
+ + +
+
+ +
+ + class + Agent(comprl.client.interfaces.IAgent): + + + +
+ +
13class Agent(IAgent):
+14    """Agent used by the end-user connecting to the server.
+15
+16    This class represents an agent that interacts with the server. It provides methods
+17    for registering event handlers and connecting to the server.
+18    """
+19
+20    def __init__(self) -> None:
+21        super().__init__()
+22
+23    @final
+24    def event(self, func):
+25        """Decorator to register a function as an event handler.
+26
+27        Args:
+28            func (function): The function to be registered as an event handler.
+29
+30        Returns:
+31            function: The registered event handler function.
+32
+33        """
+34        setattr(self, func.__name__, func)
+35        return func
+36
+37    @final
+38    def run(self, token: str, host: str = "localhost", port: int = 65335) -> None:
+39        """Connects the client to the server.
+40
+41        This method connects the client to the server using the specified token, host,
+42        and port. It internally calls the `run` method of the base class to establish
+43        the connection.
+44
+45        Args:
+46            token (str): The token used for authentication.
+47            host (str): The host address of the server. Defaults to "localhost".
+48            port (int): The port number of the server. Defaults to 65335.
+49
+50        Returns:
+51            None
+52
+53        """
+54        super().run(token)
+55        networking.connect_agent(self, host, port)
+56
+57    def on_error(self, msg: str):
+58        """Called if an error occurred on the server side."""
+59        print(f"Error: {msg}")
+60
+61    def on_message(self, msg: str):
+62        """Called if a message is sent from the server."""
+63        print(f"Info: {msg}")
+64
+65    def on_disconnect(self):
+66        """Called when the agent disconnects from the server."""
+67        print("Error: Agent disconnected from the server.")
+
+ + +

Agent used by the end-user connecting to the server.

+ +

This class represents an agent that interacts with the server. It provides methods +for registering event handlers and connecting to the server.

+
+ + +
+ +
+
@final
+ + def + event(self, func): + + + +
+ +
23    @final
+24    def event(self, func):
+25        """Decorator to register a function as an event handler.
+26
+27        Args:
+28            func (function): The function to be registered as an event handler.
+29
+30        Returns:
+31            function: The registered event handler function.
+32
+33        """
+34        setattr(self, func.__name__, func)
+35        return func
+
+ + +

Decorator to register a function as an event handler.

+ +

Args: + func (function): The function to be registered as an event handler.

+ +

Returns: + function: The registered event handler function.

+
+ + +
+
+ +
+
@final
+ + def + run(self, token: str, host: str = 'localhost', port: int = 65335) -> None: + + + +
+ +
37    @final
+38    def run(self, token: str, host: str = "localhost", port: int = 65335) -> None:
+39        """Connects the client to the server.
+40
+41        This method connects the client to the server using the specified token, host,
+42        and port. It internally calls the `run` method of the base class to establish
+43        the connection.
+44
+45        Args:
+46            token (str): The token used for authentication.
+47            host (str): The host address of the server. Defaults to "localhost".
+48            port (int): The port number of the server. Defaults to 65335.
+49
+50        Returns:
+51            None
+52
+53        """
+54        super().run(token)
+55        networking.connect_agent(self, host, port)
+
+ + +

Connects the client to the server.

+ +

This method connects the client to the server using the specified token, host, +and port. It internally calls the run method of the base class to establish +the connection.

+ +

Args: + token (str): The token used for authentication. + host (str): The host address of the server. Defaults to "localhost". + port (int): The port number of the server. Defaults to 65335.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + on_error(self, msg: str): + + + +
+ +
57    def on_error(self, msg: str):
+58        """Called if an error occurred on the server side."""
+59        print(f"Error: {msg}")
+
+ + +

Called if an error occurred on the server side.

+
+ + +
+
+ +
+ + def + on_message(self, msg: str): + + + +
+ +
61    def on_message(self, msg: str):
+62        """Called if a message is sent from the server."""
+63        print(f"Info: {msg}")
+
+ + +

Called if a message is sent from the server.

+
+ + +
+
+ +
+ + def + on_disconnect(self): + + + +
+ +
65    def on_disconnect(self):
+66        """Called when the agent disconnects from the server."""
+67        print("Error: Agent disconnected from the server.")
+
+ + +

Called when the agent disconnects from the server.

+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/client/interfaces.html b/documentation/comprl/client/interfaces.html new file mode 100644 index 0000000..f67614e --- /dev/null +++ b/documentation/comprl/client/interfaces.html @@ -0,0 +1,755 @@ + + + + + + + comprl.client.interfaces API documentation + + + + + + + + + +
+
+

+comprl.client.interfaces

+ +

This module contains the interface for the agent.

+
+ + + + + +
 1"""
+ 2This module contains the interface for the agent.
+ 3"""
+ 4
+ 5
+ 6class IAgent:
+ 7    """agent interface which could be used by the end-user"""
+ 8
+ 9    def run(self, token: str):
+10        """
+11        Runs the agent with the specified token.
+12
+13        Args:
+14            token (str): The token used for authentication.
+15        """
+16        self.token = token
+17
+18    def auth(self) -> str:
+19        """
+20        Returns the authentication token.
+21
+22        Returns:
+23            str: The authentication token.
+24        """
+25        return self.token
+26
+27    def is_ready(self) -> bool:
+28        """
+29        Returns if the agent is ready to play.
+30
+31        Returns:
+32            bool: True if the agent is ready to play, False otherwise.
+33        """
+34        return True
+35
+36    def on_start_game(self, game_id: int) -> None:
+37        """
+38        Called when a new game starts.
+39
+40        Args:
+41            game_id (int): The ID of the new game.
+42
+43        Returns:
+44            bool: True if the agent is ready to play, False otherwise.
+45        """
+46        pass
+47
+48    def get_step(self, obv: list[float]) -> list[float]:
+49        """
+50        Requests the agent's action based on the current observation.
+51
+52        Args:
+53            obv (list[float]): The current observation.
+54
+55        Returns:
+56            list[float]: The agent's action.
+57        """
+58        raise NotImplementedError("step function not implemented")
+59
+60    def on_end_game(self, result: bool, stats: list[float]) -> None:
+61        """
+62        Called when a game ends.
+63
+64        Args:
+65            result: The result of the game.
+66            stats: The statistics of the game.
+67
+68        Returns:
+69            bool: True if the agent handled the end of the game, False otherwise.
+70        """
+71        pass
+72
+73    def on_error(self, msg: str):
+74        """
+75        Called when an error occurs.
+76
+77        Args:
+78            msg (str): The error message.
+79        """
+80        pass
+81
+82    def on_message(self, msg: str):
+83        """Called when a message is sent from the server.
+84
+85        Args:
+86            msg (str): The message
+87        """
+88        pass
+89
+90    def on_disconnect(self):
+91        """Called when the agent disconnects from the server."""
+92        pass
+
+ + +
+
+ +
+ + class + IAgent: + + + +
+ +
 7class IAgent:
+ 8    """agent interface which could be used by the end-user"""
+ 9
+10    def run(self, token: str):
+11        """
+12        Runs the agent with the specified token.
+13
+14        Args:
+15            token (str): The token used for authentication.
+16        """
+17        self.token = token
+18
+19    def auth(self) -> str:
+20        """
+21        Returns the authentication token.
+22
+23        Returns:
+24            str: The authentication token.
+25        """
+26        return self.token
+27
+28    def is_ready(self) -> bool:
+29        """
+30        Returns if the agent is ready to play.
+31
+32        Returns:
+33            bool: True if the agent is ready to play, False otherwise.
+34        """
+35        return True
+36
+37    def on_start_game(self, game_id: int) -> None:
+38        """
+39        Called when a new game starts.
+40
+41        Args:
+42            game_id (int): The ID of the new game.
+43
+44        Returns:
+45            bool: True if the agent is ready to play, False otherwise.
+46        """
+47        pass
+48
+49    def get_step(self, obv: list[float]) -> list[float]:
+50        """
+51        Requests the agent's action based on the current observation.
+52
+53        Args:
+54            obv (list[float]): The current observation.
+55
+56        Returns:
+57            list[float]: The agent's action.
+58        """
+59        raise NotImplementedError("step function not implemented")
+60
+61    def on_end_game(self, result: bool, stats: list[float]) -> None:
+62        """
+63        Called when a game ends.
+64
+65        Args:
+66            result: The result of the game.
+67            stats: The statistics of the game.
+68
+69        Returns:
+70            bool: True if the agent handled the end of the game, False otherwise.
+71        """
+72        pass
+73
+74    def on_error(self, msg: str):
+75        """
+76        Called when an error occurs.
+77
+78        Args:
+79            msg (str): The error message.
+80        """
+81        pass
+82
+83    def on_message(self, msg: str):
+84        """Called when a message is sent from the server.
+85
+86        Args:
+87            msg (str): The message
+88        """
+89        pass
+90
+91    def on_disconnect(self):
+92        """Called when the agent disconnects from the server."""
+93        pass
+
+ + +

agent interface which could be used by the end-user

+
+ + +
+ +
+ + def + run(self, token: str): + + + +
+ +
10    def run(self, token: str):
+11        """
+12        Runs the agent with the specified token.
+13
+14        Args:
+15            token (str): The token used for authentication.
+16        """
+17        self.token = token
+
+ + +

Runs the agent with the specified token.

+ +

Args: + token (str): The token used for authentication.

+
+ + +
+
+ +
+ + def + auth(self) -> str: + + + +
+ +
19    def auth(self) -> str:
+20        """
+21        Returns the authentication token.
+22
+23        Returns:
+24            str: The authentication token.
+25        """
+26        return self.token
+
+ + +

Returns the authentication token.

+ +

Returns: + str: The authentication token.

+
+ + +
+
+ +
+ + def + is_ready(self) -> bool: + + + +
+ +
28    def is_ready(self) -> bool:
+29        """
+30        Returns if the agent is ready to play.
+31
+32        Returns:
+33            bool: True if the agent is ready to play, False otherwise.
+34        """
+35        return True
+
+ + +

Returns if the agent is ready to play.

+ +

Returns: + bool: True if the agent is ready to play, False otherwise.

+
+ + +
+
+ +
+ + def + on_start_game(self, game_id: int) -> None: + + + +
+ +
37    def on_start_game(self, game_id: int) -> None:
+38        """
+39        Called when a new game starts.
+40
+41        Args:
+42            game_id (int): The ID of the new game.
+43
+44        Returns:
+45            bool: True if the agent is ready to play, False otherwise.
+46        """
+47        pass
+
+ + +

Called when a new game starts.

+ +

Args: + game_id (int): The ID of the new game.

+ +

Returns: + bool: True if the agent is ready to play, False otherwise.

+
+ + +
+
+ +
+ + def + get_step(self, obv: list[float]) -> list[float]: + + + +
+ +
49    def get_step(self, obv: list[float]) -> list[float]:
+50        """
+51        Requests the agent's action based on the current observation.
+52
+53        Args:
+54            obv (list[float]): The current observation.
+55
+56        Returns:
+57            list[float]: The agent's action.
+58        """
+59        raise NotImplementedError("step function not implemented")
+
+ + +

Requests the agent's action based on the current observation.

+ +

Args: + obv (list[float]): The current observation.

+ +

Returns: + list[float]: The agent's action.

+
+ + +
+
+ +
+ + def + on_end_game(self, result: bool, stats: list[float]) -> None: + + + +
+ +
61    def on_end_game(self, result: bool, stats: list[float]) -> None:
+62        """
+63        Called when a game ends.
+64
+65        Args:
+66            result: The result of the game.
+67            stats: The statistics of the game.
+68
+69        Returns:
+70            bool: True if the agent handled the end of the game, False otherwise.
+71        """
+72        pass
+
+ + +

Called when a game ends.

+ +

Args: + result: The result of the game. + stats: The statistics of the game.

+ +

Returns: + bool: True if the agent handled the end of the game, False otherwise.

+
+ + +
+
+ +
+ + def + on_error(self, msg: str): + + + +
+ +
74    def on_error(self, msg: str):
+75        """
+76        Called when an error occurs.
+77
+78        Args:
+79            msg (str): The error message.
+80        """
+81        pass
+
+ + +

Called when an error occurs.

+ +

Args: + msg (str): The error message.

+
+ + +
+
+ +
+ + def + on_message(self, msg: str): + + + +
+ +
83    def on_message(self, msg: str):
+84        """Called when a message is sent from the server.
+85
+86        Args:
+87            msg (str): The message
+88        """
+89        pass
+
+ + +

Called when a message is sent from the server.

+ +

Args: + msg (str): The message

+
+ + +
+
+ +
+ + def + on_disconnect(self): + + + +
+ +
91    def on_disconnect(self):
+92        """Called when the agent disconnects from the server."""
+93        pass
+
+ + +

Called when the agent disconnects from the server.

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/client/networking.html b/documentation/comprl/client/networking.html new file mode 100644 index 0000000..38220c8 --- /dev/null +++ b/documentation/comprl/client/networking.html @@ -0,0 +1,1100 @@ + + + + + + + comprl.client.networking API documentation + + + + + + + + + +
+
+

+comprl.client.networking

+ +

Contains all networking related classes and functions for the client.

+
+ + + + + +
  1"""
+  2Contains all networking related classes and functions for the client.
+  3"""
+  4
+  5import logging as log
+  6
+  7from twisted.protocols import amp
+  8from twisted.internet import reactor
+  9from twisted.internet.endpoints import TCP4ClientEndpoint, connectProtocol
+ 10
+ 11from comprl.shared.commands import Ready, StartGame, EndGame, Step, Auth, Error, Message
+ 12
+ 13from .interfaces import IAgent
+ 14
+ 15VERSION = 1
+ 16
+ 17
+ 18class ClientProtocol(amp.AMP):
+ 19    """Protocol for the client.
+ 20
+ 21    Represents the protocol used by the client to communicate with the server.
+ 22    """
+ 23
+ 24    def __init__(self, agent: IAgent, boxReceiver=None, locator=None):
+ 25        """Initialize the COMPClientProtocol.
+ 26
+ 27        Args:
+ 28            agent (COMPAgent): The agent associated with the protocol.
+ 29            boxReceiver (object, optional): The box receiver object. Defaults to None.
+ 30            locator (object, optional): The locator object. Defaults to None.
+ 31        """
+ 32        super().__init__(boxReceiver, locator)
+ 33        self.agent: IAgent = agent
+ 34
+ 35    def connectionMade(self):
+ 36        """Called when the connection to the server is made."""
+ 37        log.debug("Connected to server")
+ 38        return super().connectionMade()
+ 39
+ 40    def connectionLost(self, reason):
+ 41        """Called when the connection to the server is lost.
+ 42
+ 43        Args:
+ 44            reason (object): The reason for the lost connection.
+ 45        """
+ 46        log.debug(f"Disconnected from the server. Reason: {reason}")
+ 47        if reactor.running:
+ 48            reactor.stop()
+ 49        self.agent.on_disconnect()
+ 50        return super().connectionLost(reason)
+ 51
+ 52    @Auth.responder
+ 53    def auth(self):
+ 54        """Called for authenticating the client.
+ 55
+ 56        Returns:
+ 57            dict: The client's authentication token and version.
+ 58                Example: {"token": b'...', "version": 1}
+ 59        """
+ 60        return {"token": str.encode(self.agent.auth()), "version": VERSION}
+ 61
+ 62    @Ready.responder
+ 63    def ready(self):
+ 64        """Called when the server wants to know if the client is ready.
+ 65
+ 66        Returns:
+ 67            dict: A dictionary indicating if the client is ready.
+ 68                Example: {"ready": True}
+ 69        """
+ 70        return {"ready": self.agent.is_ready()}
+ 71
+ 72    @StartGame.responder
+ 73    def start_game(self, game_id: int):
+ 74        """Called when the server starts the game.
+ 75
+ 76        Args:
+ 77            game_id (str): The ID of the game.
+ 78
+ 79        Returns:
+ 80            dict: A dictionary indicating if the client is ready to start the game.
+ 81                Example: {"ready": True}
+ 82        """
+ 83        self.agent.on_start_game(game_id)
+ 84        return {}
+ 85
+ 86    @EndGame.responder
+ 87    def end_game(self, result, stats):
+ 88        """Called when the server ends the game.
+ 89
+ 90        Args:
+ 91            result (bool): A boolean indicating if the game was won.
+ 92            stats (object): Other statistics.
+ 93
+ 94        Returns:
+ 95            dict: A dictionary indicating if the client is ready to start a new game.
+ 96                Example: {"ready": True}
+ 97        """
+ 98        self.agent.on_end_game(result=result, stats=stats)
+ 99        return {}
+100
+101    @Step.responder
+102    def step(self, obv: list[float]):
+103        """Called when the server wants the client to make a step.
+104
+105        Args:
+106            obv (list[float])): The environment given by the server.
+107
+108        Returns:
+109            dict: A dictionary containing the action that should be executed.
+110                Example: {"action": 1}
+111        """
+112        action = self.agent.get_step(obv)
+113        if isinstance(action, list) and all(isinstance(x, float) for x in action):
+114            return {"action": action}
+115        else:
+116            raise Exception(
+117                "Tried to send an action with wrong type. "
+118                "Only actions of type list[float] can be send."
+119            )
+120
+121    @Error.responder
+122    def on_error(self, msg):
+123        """Called if an error occurred on the server side.
+124
+125        Args:
+126            msg (object): The error description.
+127        """
+128        self.agent.on_error(msg=str(msg, encoding="utf-8"))
+129        return {}
+130
+131    @Message.responder
+132    def on_message(self, msg):
+133        """Called if a message from the server is sent.
+134
+135        Args:
+136            msg (object): The message.
+137        """
+138        self.agent.on_message(msg=str(msg, encoding="utf-8"))
+139        return {}
+140
+141
+142def connect_agent(agent: IAgent, host: str = "localhost", port: int = 65335):
+143    """Connects the client to the server.
+144
+145    This method connects the client to the server using the specified token, host,
+146    and port. It internally calls the `run` method of the base class to establish
+147    the connection.
+148
+149    Args:
+150        token (str): The token used for authentication.
+151        host (str): The host address of the server. Defaults to "localhost".
+152        port (int): The port number of the server. Defaults to 65335.
+153
+154    Returns:
+155        None
+156
+157    """
+158    connectProtocol(
+159        TCP4ClientEndpoint(reactor, host, port),
+160        ClientProtocol(agent),
+161        # we lose the protocol here, is this a problem?
+162    )
+163    reactor.run()  # type: ignore[attr-defined]
+
+ + +
+
+
+ VERSION = +1 + + +
+ + + + +
+
+ +
+ + class + ClientProtocol(twisted.protocols.amp.AMP): + + + +
+ +
 19class ClientProtocol(amp.AMP):
+ 20    """Protocol for the client.
+ 21
+ 22    Represents the protocol used by the client to communicate with the server.
+ 23    """
+ 24
+ 25    def __init__(self, agent: IAgent, boxReceiver=None, locator=None):
+ 26        """Initialize the COMPClientProtocol.
+ 27
+ 28        Args:
+ 29            agent (COMPAgent): The agent associated with the protocol.
+ 30            boxReceiver (object, optional): The box receiver object. Defaults to None.
+ 31            locator (object, optional): The locator object. Defaults to None.
+ 32        """
+ 33        super().__init__(boxReceiver, locator)
+ 34        self.agent: IAgent = agent
+ 35
+ 36    def connectionMade(self):
+ 37        """Called when the connection to the server is made."""
+ 38        log.debug("Connected to server")
+ 39        return super().connectionMade()
+ 40
+ 41    def connectionLost(self, reason):
+ 42        """Called when the connection to the server is lost.
+ 43
+ 44        Args:
+ 45            reason (object): The reason for the lost connection.
+ 46        """
+ 47        log.debug(f"Disconnected from the server. Reason: {reason}")
+ 48        if reactor.running:
+ 49            reactor.stop()
+ 50        self.agent.on_disconnect()
+ 51        return super().connectionLost(reason)
+ 52
+ 53    @Auth.responder
+ 54    def auth(self):
+ 55        """Called for authenticating the client.
+ 56
+ 57        Returns:
+ 58            dict: The client's authentication token and version.
+ 59                Example: {"token": b'...', "version": 1}
+ 60        """
+ 61        return {"token": str.encode(self.agent.auth()), "version": VERSION}
+ 62
+ 63    @Ready.responder
+ 64    def ready(self):
+ 65        """Called when the server wants to know if the client is ready.
+ 66
+ 67        Returns:
+ 68            dict: A dictionary indicating if the client is ready.
+ 69                Example: {"ready": True}
+ 70        """
+ 71        return {"ready": self.agent.is_ready()}
+ 72
+ 73    @StartGame.responder
+ 74    def start_game(self, game_id: int):
+ 75        """Called when the server starts the game.
+ 76
+ 77        Args:
+ 78            game_id (str): The ID of the game.
+ 79
+ 80        Returns:
+ 81            dict: A dictionary indicating if the client is ready to start the game.
+ 82                Example: {"ready": True}
+ 83        """
+ 84        self.agent.on_start_game(game_id)
+ 85        return {}
+ 86
+ 87    @EndGame.responder
+ 88    def end_game(self, result, stats):
+ 89        """Called when the server ends the game.
+ 90
+ 91        Args:
+ 92            result (bool): A boolean indicating if the game was won.
+ 93            stats (object): Other statistics.
+ 94
+ 95        Returns:
+ 96            dict: A dictionary indicating if the client is ready to start a new game.
+ 97                Example: {"ready": True}
+ 98        """
+ 99        self.agent.on_end_game(result=result, stats=stats)
+100        return {}
+101
+102    @Step.responder
+103    def step(self, obv: list[float]):
+104        """Called when the server wants the client to make a step.
+105
+106        Args:
+107            obv (list[float])): The environment given by the server.
+108
+109        Returns:
+110            dict: A dictionary containing the action that should be executed.
+111                Example: {"action": 1}
+112        """
+113        action = self.agent.get_step(obv)
+114        if isinstance(action, list) and all(isinstance(x, float) for x in action):
+115            return {"action": action}
+116        else:
+117            raise Exception(
+118                "Tried to send an action with wrong type. "
+119                "Only actions of type list[float] can be send."
+120            )
+121
+122    @Error.responder
+123    def on_error(self, msg):
+124        """Called if an error occurred on the server side.
+125
+126        Args:
+127            msg (object): The error description.
+128        """
+129        self.agent.on_error(msg=str(msg, encoding="utf-8"))
+130        return {}
+131
+132    @Message.responder
+133    def on_message(self, msg):
+134        """Called if a message from the server is sent.
+135
+136        Args:
+137            msg (object): The message.
+138        """
+139        self.agent.on_message(msg=str(msg, encoding="utf-8"))
+140        return {}
+
+ + +

Protocol for the client.

+ +

Represents the protocol used by the client to communicate with the server.

+
+ + +
+ +
+ + ClientProtocol( agent: comprl.client.interfaces.IAgent, boxReceiver=None, locator=None) + + + +
+ +
25    def __init__(self, agent: IAgent, boxReceiver=None, locator=None):
+26        """Initialize the COMPClientProtocol.
+27
+28        Args:
+29            agent (COMPAgent): The agent associated with the protocol.
+30            boxReceiver (object, optional): The box receiver object. Defaults to None.
+31            locator (object, optional): The locator object. Defaults to None.
+32        """
+33        super().__init__(boxReceiver, locator)
+34        self.agent: IAgent = agent
+
+ + +

Initialize the COMPClientProtocol.

+ +

Args: + agent (COMPAgent): The agent associated with the protocol. + boxReceiver (object, optional): The box receiver object. Defaults to None. + locator (object, optional): The locator object. Defaults to None.

+
+ + +
+
+ + + + + +
+
+ +
+ + def + connectionMade(self): + + + +
+ +
36    def connectionMade(self):
+37        """Called when the connection to the server is made."""
+38        log.debug("Connected to server")
+39        return super().connectionMade()
+
+ + +

Called when the connection to the server is made.

+
+ + +
+
+ +
+ + def + connectionLost(self, reason): + + + +
+ +
41    def connectionLost(self, reason):
+42        """Called when the connection to the server is lost.
+43
+44        Args:
+45            reason (object): The reason for the lost connection.
+46        """
+47        log.debug(f"Disconnected from the server. Reason: {reason}")
+48        if reactor.running:
+49            reactor.stop()
+50        self.agent.on_disconnect()
+51        return super().connectionLost(reason)
+
+ + +

Called when the connection to the server is lost.

+ +

Args: + reason (object): The reason for the lost connection.

+
+ + +
+
+ +
+
@Auth.responder
+ + def + auth(self): + + + +
+ +
53    @Auth.responder
+54    def auth(self):
+55        """Called for authenticating the client.
+56
+57        Returns:
+58            dict: The client's authentication token and version.
+59                Example: {"token": b'...', "version": 1}
+60        """
+61        return {"token": str.encode(self.agent.auth()), "version": VERSION}
+
+ + +

Called for authenticating the client.

+ +

Returns: + dict: The client's authentication token and version. + Example: {"token": b'...', "version": 1}

+
+ + +
+
+ +
+
@Ready.responder
+ + def + ready(self): + + + +
+ +
63    @Ready.responder
+64    def ready(self):
+65        """Called when the server wants to know if the client is ready.
+66
+67        Returns:
+68            dict: A dictionary indicating if the client is ready.
+69                Example: {"ready": True}
+70        """
+71        return {"ready": self.agent.is_ready()}
+
+ + +

Called when the server wants to know if the client is ready.

+ +

Returns: + dict: A dictionary indicating if the client is ready. + Example: {"ready": True}

+
+ + +
+
+ +
+
@StartGame.responder
+ + def + start_game(self, game_id: int): + + + +
+ +
73    @StartGame.responder
+74    def start_game(self, game_id: int):
+75        """Called when the server starts the game.
+76
+77        Args:
+78            game_id (str): The ID of the game.
+79
+80        Returns:
+81            dict: A dictionary indicating if the client is ready to start the game.
+82                Example: {"ready": True}
+83        """
+84        self.agent.on_start_game(game_id)
+85        return {}
+
+ + +

Called when the server starts the game.

+ +

Args: + game_id (str): The ID of the game.

+ +

Returns: + dict: A dictionary indicating if the client is ready to start the game. + Example: {"ready": True}

+
+ + +
+
+ +
+
@EndGame.responder
+ + def + end_game(self, result, stats): + + + +
+ +
 87    @EndGame.responder
+ 88    def end_game(self, result, stats):
+ 89        """Called when the server ends the game.
+ 90
+ 91        Args:
+ 92            result (bool): A boolean indicating if the game was won.
+ 93            stats (object): Other statistics.
+ 94
+ 95        Returns:
+ 96            dict: A dictionary indicating if the client is ready to start a new game.
+ 97                Example: {"ready": True}
+ 98        """
+ 99        self.agent.on_end_game(result=result, stats=stats)
+100        return {}
+
+ + +

Called when the server ends the game.

+ +

Args: + result (bool): A boolean indicating if the game was won. + stats (object): Other statistics.

+ +

Returns: + dict: A dictionary indicating if the client is ready to start a new game. + Example: {"ready": True}

+
+ + +
+
+ +
+
@Step.responder
+ + def + step(self, obv: list[float]): + + + +
+ +
102    @Step.responder
+103    def step(self, obv: list[float]):
+104        """Called when the server wants the client to make a step.
+105
+106        Args:
+107            obv (list[float])): The environment given by the server.
+108
+109        Returns:
+110            dict: A dictionary containing the action that should be executed.
+111                Example: {"action": 1}
+112        """
+113        action = self.agent.get_step(obv)
+114        if isinstance(action, list) and all(isinstance(x, float) for x in action):
+115            return {"action": action}
+116        else:
+117            raise Exception(
+118                "Tried to send an action with wrong type. "
+119                "Only actions of type list[float] can be send."
+120            )
+
+ + +

Called when the server wants the client to make a step.

+ +

Args: + obv (list[float])): The environment given by the server.

+ +

Returns: + dict: A dictionary containing the action that should be executed. + Example: {"action": 1}

+
+ + +
+
+ +
+
@Error.responder
+ + def + on_error(self, msg): + + + +
+ +
122    @Error.responder
+123    def on_error(self, msg):
+124        """Called if an error occurred on the server side.
+125
+126        Args:
+127            msg (object): The error description.
+128        """
+129        self.agent.on_error(msg=str(msg, encoding="utf-8"))
+130        return {}
+
+ + +

Called if an error occurred on the server side.

+ +

Args: + msg (object): The error description.

+
+ + +
+
+ +
+
@Message.responder
+ + def + on_message(self, msg): + + + +
+ +
132    @Message.responder
+133    def on_message(self, msg):
+134        """Called if a message from the server is sent.
+135
+136        Args:
+137            msg (object): The message.
+138        """
+139        self.agent.on_message(msg=str(msg, encoding="utf-8"))
+140        return {}
+
+ + +

Called if a message from the server is sent.

+ +

Args: + msg (object): The message.

+
+ + +
+
+
Inherited Members
+
+
twisted.protocols.amp.AMP
+
locateResponder
+
makeConnection
+ +
+
twisted.protocols.amp.BinaryBoxProtocol
+
hostCertificate
+
noPeerCertificate
+
innerProtocol
+
innerProtocolClientFactory
+
boxReceiver
+
sendBox
+
dataReceived
+
MAX_LENGTH
+
proto_init
+
proto_key
+
proto_value
+
lengthLimitExceeded
+
peerCertificate
+
unhandledError
+ +
+
twisted.protocols.basic.StatefulStringProtocol
+
state
+
stringReceived
+ +
+
twisted.protocols.basic.Int16StringReceiver
+
structFormat
+
prefixLength
+ +
+
twisted.protocols.basic.IntNStringReceiver
+
recvd
+
sendString
+ +
+
twisted.internet.protocol.Protocol
+
factory
+
logPrefix
+ +
+
twisted.internet.protocol.BaseProtocol
+
connected
+
transport
+ +
+
twisted.protocols.basic._PauseableMixin
+
paused
+
pauseProducing
+
resumeProducing
+
stopProducing
+ +
+
twisted.protocols.amp._DescriptorExchanger
+
fileDescriptorReceived
+ +
+
twisted.protocols.amp.BoxDispatcher
+
boxSender
+
locator
+
startReceivingBoxes
+
stopReceivingBoxes
+
failAllOutgoing
+
callRemoteString
+
callRemote
+
ampBoxReceived
+
dispatchCommand
+ +
+
twisted.protocols.amp.CommandLocator
+
lookupFunction
+ +
+
twisted.protocols.amp.SimpleStringLocator
+
baseDispatchPrefix
+ +
+
+
+
+
+ +
+ + def + connect_agent( agent: comprl.client.interfaces.IAgent, host: str = 'localhost', port: int = 65335): + + + +
+ +
143def connect_agent(agent: IAgent, host: str = "localhost", port: int = 65335):
+144    """Connects the client to the server.
+145
+146    This method connects the client to the server using the specified token, host,
+147    and port. It internally calls the `run` method of the base class to establish
+148    the connection.
+149
+150    Args:
+151        token (str): The token used for authentication.
+152        host (str): The host address of the server. Defaults to "localhost".
+153        port (int): The port number of the server. Defaults to 65335.
+154
+155    Returns:
+156        None
+157
+158    """
+159    connectProtocol(
+160        TCP4ClientEndpoint(reactor, host, port),
+161        ClientProtocol(agent),
+162        # we lose the protocol here, is this a problem?
+163    )
+164    reactor.run()  # type: ignore[attr-defined]
+
+ + +

Connects the client to the server.

+ +

This method connects the client to the server using the specified token, host, +and port. It internally calls the run method of the base class to establish +the connection.

+ +

Args: + token (str): The token used for authentication. + host (str): The host address of the server. Defaults to "localhost". + port (int): The port number of the server. Defaults to 65335.

+ +

Returns: + None

+
+ + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server.html b/documentation/comprl/server.html new file mode 100644 index 0000000..c40d810 --- /dev/null +++ b/documentation/comprl/server.html @@ -0,0 +1,241 @@ + + + + + + + comprl.server API documentation + + + + + + + + + +
+
+

+comprl.server

+ + + + + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/data.html b/documentation/comprl/server/data.html new file mode 100644 index 0000000..c7e5771 --- /dev/null +++ b/documentation/comprl/server/data.html @@ -0,0 +1,244 @@ + + + + + + + comprl.server.data API documentation + + + + + + + + + +
+
+

+comprl.server.data

+ + + + + + +
1from .sql_backend import GameData, UserData  # noqa
+2from .sql_backend import SQLiteConnectionInfo as ConnectionInfo  # noqa
+
+ + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/data/interfaces.html b/documentation/comprl/server/data/interfaces.html new file mode 100644 index 0000000..66a5c15 --- /dev/null +++ b/documentation/comprl/server/data/interfaces.html @@ -0,0 +1,806 @@ + + + + + + + comprl.server.data.interfaces API documentation + + + + + + + + + +
+
+

+comprl.server.data.interfaces

+ +

This module contains the interfaces for the game data.

+
+ + + + + +
 1"""
+ 2This module contains the interfaces for the game data.
+ 3"""
+ 4
+ 5from datetime import datetime
+ 6from enum import IntEnum, Enum
+ 7
+ 8from comprl.shared.types import GameID
+ 9
+10
+11class GameEndState(IntEnum):
+12    """
+13    Represents the possible end states of a game.
+14
+15    Attributes:
+16        WIN: The game ended with a win.
+17        DRAW: The game ended in a draw.
+18        DISCONNECTED: The game ended due to a disconnection.
+19    """
+20
+21    WIN = 0
+22    DRAW = 1
+23    DISCONNECTED = 2
+24
+25
+26class GameResult:
+27    """Result and statistics of a game"""
+28
+29    def __init__(
+30        self,
+31        game_id: GameID,
+32        user1_id: int,
+33        user2_id: int,
+34        score_user_1: float,
+35        score_user_2: float,
+36        start_time=None,
+37        end_state: GameEndState = GameEndState.WIN,
+38        is_user1_winner: bool = True,
+39        is_user1_disconnected: bool = True,
+40    ) -> None:
+41        """initialize a game result
+42
+43        Args:
+44            game_id (UUID): id of the game
+45            user1_id (int): id of the first user
+46            user2_id (int): id of the second user
+47            score_user_1 (float): score of the first user
+48            score_user_2 (float): score of the second user
+49            start_time (str, optional): time, when the game started.
+50                Defaults to None (current time).
+51            end_state (int, optional): end-state of the game.
+52                Defaults to GameEndState.WIN.
+53            is_user1_winner (bool, optional): is user 1 the winner?
+54                Defaults to True.
+55            is_user1_disconnected (bool, optional): is user 1 disconnected?
+56                Defaults to True.
+57        """
+58        self.game_id = game_id
+59        self.user1_id = user1_id
+60        self.user2_id = user2_id
+61        self.score_user_1 = score_user_1
+62        self.score_user_2 = score_user_2
+63        self.start_time = start_time
+64        self.end_state = end_state
+65
+66        if self.start_time is None:
+67            self.start_time = datetime.now()
+68
+69        self.winner_id = None
+70        if end_state == GameEndState.WIN:
+71            self.winner_id = user1_id if is_user1_winner else user2_id
+72
+73        self.disconnected_id = None
+74        if end_state == GameEndState.DISCONNECTED:
+75            self.disconnected_id = user1_id if is_user1_disconnected else user2_id
+76
+77
+78class UserRole(Enum):
+79    """
+80    Represents the possible user roles.
+81
+82    Attributes:
+83        USER: Normal user without administrative rights.
+84        ADMIN = User with administrative rights.
+85    """
+86
+87    USER = "user"
+88    ADMIN = "admin"
+
+ + +
+
+ +
+ + class + GameEndState(enum.IntEnum): + + + +
+ +
12class GameEndState(IntEnum):
+13    """
+14    Represents the possible end states of a game.
+15
+16    Attributes:
+17        WIN: The game ended with a win.
+18        DRAW: The game ended in a draw.
+19        DISCONNECTED: The game ended due to a disconnection.
+20    """
+21
+22    WIN = 0
+23    DRAW = 1
+24    DISCONNECTED = 2
+
+ + +

Represents the possible end states of a game.

+ +

Attributes: + WIN: The game ended with a win. + DRAW: The game ended in a draw. + DISCONNECTED: The game ended due to a disconnection.

+
+ + +
+
+ WIN = +<GameEndState.WIN: 0> + + +
+ + + + +
+
+
+ DRAW = +<GameEndState.DRAW: 1> + + +
+ + + + +
+
+
+ DISCONNECTED = +<GameEndState.DISCONNECTED: 2> + + +
+ + + + +
+
+
Inherited Members
+
+
enum.Enum
+
name
+
value
+ +
+
builtins.int
+
conjugate
+
bit_length
+
bit_count
+
to_bytes
+
from_bytes
+
as_integer_ratio
+
real
+
imag
+
numerator
+
denominator
+ +
+
+
+
+
+ +
+ + class + GameResult: + + + +
+ +
27class GameResult:
+28    """Result and statistics of a game"""
+29
+30    def __init__(
+31        self,
+32        game_id: GameID,
+33        user1_id: int,
+34        user2_id: int,
+35        score_user_1: float,
+36        score_user_2: float,
+37        start_time=None,
+38        end_state: GameEndState = GameEndState.WIN,
+39        is_user1_winner: bool = True,
+40        is_user1_disconnected: bool = True,
+41    ) -> None:
+42        """initialize a game result
+43
+44        Args:
+45            game_id (UUID): id of the game
+46            user1_id (int): id of the first user
+47            user2_id (int): id of the second user
+48            score_user_1 (float): score of the first user
+49            score_user_2 (float): score of the second user
+50            start_time (str, optional): time, when the game started.
+51                Defaults to None (current time).
+52            end_state (int, optional): end-state of the game.
+53                Defaults to GameEndState.WIN.
+54            is_user1_winner (bool, optional): is user 1 the winner?
+55                Defaults to True.
+56            is_user1_disconnected (bool, optional): is user 1 disconnected?
+57                Defaults to True.
+58        """
+59        self.game_id = game_id
+60        self.user1_id = user1_id
+61        self.user2_id = user2_id
+62        self.score_user_1 = score_user_1
+63        self.score_user_2 = score_user_2
+64        self.start_time = start_time
+65        self.end_state = end_state
+66
+67        if self.start_time is None:
+68            self.start_time = datetime.now()
+69
+70        self.winner_id = None
+71        if end_state == GameEndState.WIN:
+72            self.winner_id = user1_id if is_user1_winner else user2_id
+73
+74        self.disconnected_id = None
+75        if end_state == GameEndState.DISCONNECTED:
+76            self.disconnected_id = user1_id if is_user1_disconnected else user2_id
+
+ + +

Result and statistics of a game

+
+ + +
+ +
+ + GameResult( game_id: uuid.UUID, user1_id: int, user2_id: int, score_user_1: float, score_user_2: float, start_time=None, end_state: GameEndState = <GameEndState.WIN: 0>, is_user1_winner: bool = True, is_user1_disconnected: bool = True) + + + +
+ +
30    def __init__(
+31        self,
+32        game_id: GameID,
+33        user1_id: int,
+34        user2_id: int,
+35        score_user_1: float,
+36        score_user_2: float,
+37        start_time=None,
+38        end_state: GameEndState = GameEndState.WIN,
+39        is_user1_winner: bool = True,
+40        is_user1_disconnected: bool = True,
+41    ) -> None:
+42        """initialize a game result
+43
+44        Args:
+45            game_id (UUID): id of the game
+46            user1_id (int): id of the first user
+47            user2_id (int): id of the second user
+48            score_user_1 (float): score of the first user
+49            score_user_2 (float): score of the second user
+50            start_time (str, optional): time, when the game started.
+51                Defaults to None (current time).
+52            end_state (int, optional): end-state of the game.
+53                Defaults to GameEndState.WIN.
+54            is_user1_winner (bool, optional): is user 1 the winner?
+55                Defaults to True.
+56            is_user1_disconnected (bool, optional): is user 1 disconnected?
+57                Defaults to True.
+58        """
+59        self.game_id = game_id
+60        self.user1_id = user1_id
+61        self.user2_id = user2_id
+62        self.score_user_1 = score_user_1
+63        self.score_user_2 = score_user_2
+64        self.start_time = start_time
+65        self.end_state = end_state
+66
+67        if self.start_time is None:
+68            self.start_time = datetime.now()
+69
+70        self.winner_id = None
+71        if end_state == GameEndState.WIN:
+72            self.winner_id = user1_id if is_user1_winner else user2_id
+73
+74        self.disconnected_id = None
+75        if end_state == GameEndState.DISCONNECTED:
+76            self.disconnected_id = user1_id if is_user1_disconnected else user2_id
+
+ + +

initialize a game result

+ +

Args: + game_id (UUID): id of the game + user1_id (int): id of the first user + user2_id (int): id of the second user + score_user_1 (float): score of the first user + score_user_2 (float): score of the second user + start_time (str, optional): time, when the game started. + Defaults to None (current time). + end_state (int, optional): end-state of the game. + Defaults to GameEndState.WIN. + is_user1_winner (bool, optional): is user 1 the winner? + Defaults to True. + is_user1_disconnected (bool, optional): is user 1 disconnected? + Defaults to True.

+
+ + +
+
+
+ game_id + + +
+ + + + +
+
+
+ user1_id + + +
+ + + + +
+
+
+ user2_id + + +
+ + + + +
+
+
+ score_user_1 + + +
+ + + + +
+
+
+ score_user_2 + + +
+ + + + +
+
+
+ start_time + + +
+ + + + +
+
+
+ end_state + + +
+ + + + +
+
+
+ winner_id + + +
+ + + + +
+
+
+ disconnected_id + + +
+ + + + +
+
+
+ +
+ + class + UserRole(enum.Enum): + + + +
+ +
79class UserRole(Enum):
+80    """
+81    Represents the possible user roles.
+82
+83    Attributes:
+84        USER: Normal user without administrative rights.
+85        ADMIN = User with administrative rights.
+86    """
+87
+88    USER = "user"
+89    ADMIN = "admin"
+
+ + +

Represents the possible user roles.

+ +

Attributes: + USER: Normal user without administrative rights. + ADMIN = User with administrative rights.

+
+ + +
+
+ USER = +<UserRole.USER: 'user'> + + +
+ + + + +
+
+
+ ADMIN = +<UserRole.ADMIN: 'admin'> + + +
+ + + + +
+
+
Inherited Members
+
+
enum.Enum
+
name
+
value
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/data/sql_backend.html b/documentation/comprl/server/data/sql_backend.html new file mode 100644 index 0000000..174c5f6 --- /dev/null +++ b/documentation/comprl/server/data/sql_backend.html @@ -0,0 +1,1405 @@ + + + + + + + comprl.server.data.sql_backend API documentation + + + + + + + + + +
+
+

+comprl.server.data.sql_backend

+ +

Implementation of the data access objects for managing game and user data in SQLite.

+
+ + + + + +
  1"""
+  2Implementation of the data access objects for managing game and user data in SQLite.
+  3"""
+  4
+  5import dataclasses
+  6import sqlite3
+  7
+  8from comprl.server.data.interfaces import GameResult, UserRole
+  9from comprl.shared.types import GameID
+ 10
+ 11
+ 12@dataclasses.dataclass
+ 13class SQLiteConnectionInfo:
+ 14    """
+ 15    Represents the connection information for SQLite database.
+ 16
+ 17    Attributes:
+ 18        host (str): The host of the SQLite database.
+ 19        table (int): The table number in the database.
+ 20    """
+ 21
+ 22    host: str
+ 23    table: str
+ 24
+ 25
+ 26class GameData:
+ 27    """
+ 28    Represents a data access object for managing game data in a SQLite database.
+ 29
+ 30    Attributes:
+ 31        connection (sqlite3.Connection): The connection to the SQLite database.
+ 32        cursor (sqlite3.Cursor): The cursor for executing SQL queries.
+ 33
+ 34    """
+ 35
+ 36    def __init__(self, connection: SQLiteConnectionInfo) -> None:
+ 37        # connect to the database
+ 38        self.connection = sqlite3.connect(connection.host)
+ 39        self.cursor = self.connection.cursor()
+ 40        self.table = connection.table
+ 41
+ 42        self.cursor.execute(
+ 43            f"""
+ 44            CREATE TABLE IF NOT EXISTS {self.table} (
+ 45            game_id TEXT NOT NULL PRIMARY KEY,
+ 46            user1, 
+ 47            user2, 
+ 48            score1, 
+ 49            score2,
+ 50            start_time,
+ 51            end_state,
+ 52            winner,
+ 53            disconnected)"""
+ 54        )
+ 55
+ 56    def add(self, game_result: GameResult) -> None:
+ 57        """
+ 58        Adds a game result to the database.
+ 59
+ 60        Args:
+ 61            game_result (GameResult): The game result to be added.
+ 62
+ 63        """
+ 64        self.cursor.execute(
+ 65            f"""INSERT INTO {self.table} VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""",
+ 66            (
+ 67                str(game_result.game_id),
+ 68                game_result.user1_id,
+ 69                game_result.user2_id,
+ 70                game_result.score_user_1,
+ 71                game_result.score_user_2,
+ 72                game_result.start_time,
+ 73                game_result.end_state,
+ 74                game_result.winner_id,
+ 75                game_result.disconnected_id,
+ 76            ),
+ 77        )
+ 78        self.connection.commit()
+ 79
+ 80    def remove(self, game_id: GameID) -> None:
+ 81        """
+ 82        Removes a game from the database based on its ID.
+ 83
+ 84        Args:
+ 85            game_id (str): The ID of the game to be removed.
+ 86
+ 87        """
+ 88        self.cursor.execute(
+ 89            f"""DELETE FROM {self.table} WHERE game_id=?""",
+ 90            (game_id,),
+ 91        )
+ 92        self.connection.commit()
+ 93
+ 94    # TODO:  I skipped some functions here due to time constraints.
+ 95    #       And cuurently no use of them in the code...
+ 96
+ 97
+ 98class UserData:
+ 99    """
+100    Represents a data access object for managing game data in a SQLite database.
+101
+102    Attributes:
+103        connection (sqlite3.Connection): The connection to the SQLite database.
+104        cursor (sqlite3.Cursor): The cursor for executing SQL queries.
+105    """
+106
+107    def __init__(self, connection: SQLiteConnectionInfo) -> None:
+108        """
+109        Initializes a new instance of the UserData class.
+110
+111        Args:
+112            connection (SQLiteConnectionInfo): The connection information for SQLite.
+113        """
+114        # connect to the database
+115        self.connection = sqlite3.connect(connection.host)
+116        self.cursor = self.connection.cursor()
+117        self.table = connection.table
+118
+119        self.cursor.execute(
+120            f"""
+121            CREATE TABLE IF NOT EXISTS {connection.table} (
+122            user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+123            username TEXT NOT NULL UNIQUE,
+124            password TEXT NOT NULL,
+125            role TEXT NOT NULL DEFAULT 'user',
+126            token TEXT NOT NULL,
+127            mu FLOAT NOT NULL,
+128            sigma FLOAT NOT NULL
+129            )"""
+130        )
+131
+132    def add(
+133        self,
+134        user_name: str,
+135        user_password: str,
+136        user_token: str,
+137        user_role=UserRole.USER,
+138        user_mu=25.000,
+139        user_sigma=8.333,
+140    ) -> int:
+141        """
+142        Adds a new user to the database.
+143
+144        Args:
+145            user_name (str): The name of the user.
+146            user_password (str): The password of the user.
+147            user_token (str): The token of the user.
+148            user_role (UserRole, optional): The role of the user.
+149            Defaults to UserRole.USER.
+150            user_mu (float, optional): The mu value of the user. Defaults to 25.
+151            user_sigma (float, optional): The sigma value of the user. Defaults to 8.33.
+152
+153        Returns:
+154            int: The ID of the newly added user.
+155        """
+156
+157        user_role = user_role.value
+158
+159        self.cursor.execute(
+160            f"""INSERT INTO {self.table}(username, password, role, token, mu, sigma)
+161            VALUES (?,?,?,?,?,?)""",
+162            (user_name, user_password, user_role, user_token, user_mu, user_sigma),
+163        )
+164        self.cursor.execute(
+165            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+166            (user_token,),
+167        )
+168        self.connection.commit()
+169        return self.cursor.fetchone()[0]
+170
+171    def remove(self, user_id: int) -> None:
+172        """
+173        Removes a user from the database based on their ID.
+174
+175        Args:
+176            user_id (int): The ID of the user to be removed.
+177        """
+178        self.cursor.execute(
+179            f"""DELETE FROM {self.table} WHERE user_id=?""",
+180            (user_id,),
+181        )
+182        self.connection.commit()
+183
+184    def is_verified(self, user_token: str) -> bool:
+185        """
+186        Checks if a user is verified based on their token.
+187
+188        Args:
+189            user_token (str): The token of the user.
+190
+191        Returns:
+192            bool: True if the user is verified, False otherwise.
+193        """
+194        self.cursor.execute(
+195            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+196            (user_token,),
+197        )
+198        result = self.cursor.fetchone()
+199        if result is not None:
+200            return True
+201        return False
+202
+203    def get_user_id(self, user_token: str) -> int | None:
+204        """
+205        Retrieves the ID of a user based on their token.
+206
+207        Args:
+208            user_token (str): The token of the user.
+209
+210        Returns:
+211            int: The ID of the user, or -1 if the user is not found.
+212        """
+213        self.cursor.execute(
+214            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+215            (user_token,),
+216        )
+217        result = self.cursor.fetchone()
+218        if result is not None:
+219            return result[0]
+220
+221        return None
+222
+223    def get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]:
+224        """
+225        Retrieves the matchmaking parameters of a user based on their ID.
+226
+227        Args:
+228            user_id (int): The ID of the user.
+229
+230        Returns:
+231            tuple[float, float]: The mu and sigma values of the user.
+232        """
+233        self.cursor.execute(
+234            f"""SELECT mu, sigma FROM {self.table} WHERE user_id=?""",
+235            (user_id,),
+236        )
+237        return self.cursor.fetchone()
+238
+239    def set_matchmaking_parameters(self, user_id: int, mu: float, sigma: float) -> None:
+240        """
+241        Sets the matchmaking parameters of a user based on their ID.
+242
+243        Args:
+244            user_id (int): The ID of the user.
+245            mu (float): The new mu value of the user.
+246            sigma (float): The new sigma value of the user.
+247        """
+248        self.cursor.execute(
+249            f"""UPDATE {self.table} SET mu=?, sigma=? WHERE user_id=?""",
+250            (mu, sigma, user_id),
+251        )
+252        self.connection.commit()
+
+ + +
+
+ +
+
@dataclasses.dataclass
+ + class + SQLiteConnectionInfo: + + + +
+ +
13@dataclasses.dataclass
+14class SQLiteConnectionInfo:
+15    """
+16    Represents the connection information for SQLite database.
+17
+18    Attributes:
+19        host (str): The host of the SQLite database.
+20        table (int): The table number in the database.
+21    """
+22
+23    host: str
+24    table: str
+
+ + +

Represents the connection information for SQLite database.

+ +

Attributes: + host (str): The host of the SQLite database. + table (int): The table number in the database.

+
+ + +
+
+ + SQLiteConnectionInfo(host: str, table: str) + + +
+ + + + +
+
+
+ host: str + + +
+ + + + +
+
+
+ table: str + + +
+ + + + +
+
+
+ +
+ + class + GameData: + + + +
+ +
27class GameData:
+28    """
+29    Represents a data access object for managing game data in a SQLite database.
+30
+31    Attributes:
+32        connection (sqlite3.Connection): The connection to the SQLite database.
+33        cursor (sqlite3.Cursor): The cursor for executing SQL queries.
+34
+35    """
+36
+37    def __init__(self, connection: SQLiteConnectionInfo) -> None:
+38        # connect to the database
+39        self.connection = sqlite3.connect(connection.host)
+40        self.cursor = self.connection.cursor()
+41        self.table = connection.table
+42
+43        self.cursor.execute(
+44            f"""
+45            CREATE TABLE IF NOT EXISTS {self.table} (
+46            game_id TEXT NOT NULL PRIMARY KEY,
+47            user1, 
+48            user2, 
+49            score1, 
+50            score2,
+51            start_time,
+52            end_state,
+53            winner,
+54            disconnected)"""
+55        )
+56
+57    def add(self, game_result: GameResult) -> None:
+58        """
+59        Adds a game result to the database.
+60
+61        Args:
+62            game_result (GameResult): The game result to be added.
+63
+64        """
+65        self.cursor.execute(
+66            f"""INSERT INTO {self.table} VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""",
+67            (
+68                str(game_result.game_id),
+69                game_result.user1_id,
+70                game_result.user2_id,
+71                game_result.score_user_1,
+72                game_result.score_user_2,
+73                game_result.start_time,
+74                game_result.end_state,
+75                game_result.winner_id,
+76                game_result.disconnected_id,
+77            ),
+78        )
+79        self.connection.commit()
+80
+81    def remove(self, game_id: GameID) -> None:
+82        """
+83        Removes a game from the database based on its ID.
+84
+85        Args:
+86            game_id (str): The ID of the game to be removed.
+87
+88        """
+89        self.cursor.execute(
+90            f"""DELETE FROM {self.table} WHERE game_id=?""",
+91            (game_id,),
+92        )
+93        self.connection.commit()
+94
+95    # TODO:  I skipped some functions here due to time constraints.
+96    #       And cuurently no use of them in the code...
+
+ + +

Represents a data access object for managing game data in a SQLite database.

+ +

Attributes: + connection (sqlite3.Connection): The connection to the SQLite database. + cursor (sqlite3.Cursor): The cursor for executing SQL queries.

+
+ + +
+ +
+ + GameData(connection: SQLiteConnectionInfo) + + + +
+ +
37    def __init__(self, connection: SQLiteConnectionInfo) -> None:
+38        # connect to the database
+39        self.connection = sqlite3.connect(connection.host)
+40        self.cursor = self.connection.cursor()
+41        self.table = connection.table
+42
+43        self.cursor.execute(
+44            f"""
+45            CREATE TABLE IF NOT EXISTS {self.table} (
+46            game_id TEXT NOT NULL PRIMARY KEY,
+47            user1, 
+48            user2, 
+49            score1, 
+50            score2,
+51            start_time,
+52            end_state,
+53            winner,
+54            disconnected)"""
+55        )
+
+ + + + +
+
+
+ connection + + +
+ + + + +
+
+
+ cursor + + +
+ + + + +
+
+
+ table + + +
+ + + + +
+
+ +
+ + def + add(self, game_result: comprl.server.data.interfaces.GameResult) -> None: + + + +
+ +
57    def add(self, game_result: GameResult) -> None:
+58        """
+59        Adds a game result to the database.
+60
+61        Args:
+62            game_result (GameResult): The game result to be added.
+63
+64        """
+65        self.cursor.execute(
+66            f"""INSERT INTO {self.table} VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""",
+67            (
+68                str(game_result.game_id),
+69                game_result.user1_id,
+70                game_result.user2_id,
+71                game_result.score_user_1,
+72                game_result.score_user_2,
+73                game_result.start_time,
+74                game_result.end_state,
+75                game_result.winner_id,
+76                game_result.disconnected_id,
+77            ),
+78        )
+79        self.connection.commit()
+
+ + +

Adds a game result to the database.

+ +

Args: + game_result (GameResult): The game result to be added.

+
+ + +
+
+ +
+ + def + remove(self, game_id: uuid.UUID) -> None: + + + +
+ +
81    def remove(self, game_id: GameID) -> None:
+82        """
+83        Removes a game from the database based on its ID.
+84
+85        Args:
+86            game_id (str): The ID of the game to be removed.
+87
+88        """
+89        self.cursor.execute(
+90            f"""DELETE FROM {self.table} WHERE game_id=?""",
+91            (game_id,),
+92        )
+93        self.connection.commit()
+
+ + +

Removes a game from the database based on its ID.

+ +

Args: + game_id (str): The ID of the game to be removed.

+
+ + +
+
+
+ +
+ + class + UserData: + + + +
+ +
 99class UserData:
+100    """
+101    Represents a data access object for managing game data in a SQLite database.
+102
+103    Attributes:
+104        connection (sqlite3.Connection): The connection to the SQLite database.
+105        cursor (sqlite3.Cursor): The cursor for executing SQL queries.
+106    """
+107
+108    def __init__(self, connection: SQLiteConnectionInfo) -> None:
+109        """
+110        Initializes a new instance of the UserData class.
+111
+112        Args:
+113            connection (SQLiteConnectionInfo): The connection information for SQLite.
+114        """
+115        # connect to the database
+116        self.connection = sqlite3.connect(connection.host)
+117        self.cursor = self.connection.cursor()
+118        self.table = connection.table
+119
+120        self.cursor.execute(
+121            f"""
+122            CREATE TABLE IF NOT EXISTS {connection.table} (
+123            user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+124            username TEXT NOT NULL UNIQUE,
+125            password TEXT NOT NULL,
+126            role TEXT NOT NULL DEFAULT 'user',
+127            token TEXT NOT NULL,
+128            mu FLOAT NOT NULL,
+129            sigma FLOAT NOT NULL
+130            )"""
+131        )
+132
+133    def add(
+134        self,
+135        user_name: str,
+136        user_password: str,
+137        user_token: str,
+138        user_role=UserRole.USER,
+139        user_mu=25.000,
+140        user_sigma=8.333,
+141    ) -> int:
+142        """
+143        Adds a new user to the database.
+144
+145        Args:
+146            user_name (str): The name of the user.
+147            user_password (str): The password of the user.
+148            user_token (str): The token of the user.
+149            user_role (UserRole, optional): The role of the user.
+150            Defaults to UserRole.USER.
+151            user_mu (float, optional): The mu value of the user. Defaults to 25.
+152            user_sigma (float, optional): The sigma value of the user. Defaults to 8.33.
+153
+154        Returns:
+155            int: The ID of the newly added user.
+156        """
+157
+158        user_role = user_role.value
+159
+160        self.cursor.execute(
+161            f"""INSERT INTO {self.table}(username, password, role, token, mu, sigma)
+162            VALUES (?,?,?,?,?,?)""",
+163            (user_name, user_password, user_role, user_token, user_mu, user_sigma),
+164        )
+165        self.cursor.execute(
+166            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+167            (user_token,),
+168        )
+169        self.connection.commit()
+170        return self.cursor.fetchone()[0]
+171
+172    def remove(self, user_id: int) -> None:
+173        """
+174        Removes a user from the database based on their ID.
+175
+176        Args:
+177            user_id (int): The ID of the user to be removed.
+178        """
+179        self.cursor.execute(
+180            f"""DELETE FROM {self.table} WHERE user_id=?""",
+181            (user_id,),
+182        )
+183        self.connection.commit()
+184
+185    def is_verified(self, user_token: str) -> bool:
+186        """
+187        Checks if a user is verified based on their token.
+188
+189        Args:
+190            user_token (str): The token of the user.
+191
+192        Returns:
+193            bool: True if the user is verified, False otherwise.
+194        """
+195        self.cursor.execute(
+196            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+197            (user_token,),
+198        )
+199        result = self.cursor.fetchone()
+200        if result is not None:
+201            return True
+202        return False
+203
+204    def get_user_id(self, user_token: str) -> int | None:
+205        """
+206        Retrieves the ID of a user based on their token.
+207
+208        Args:
+209            user_token (str): The token of the user.
+210
+211        Returns:
+212            int: The ID of the user, or -1 if the user is not found.
+213        """
+214        self.cursor.execute(
+215            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+216            (user_token,),
+217        )
+218        result = self.cursor.fetchone()
+219        if result is not None:
+220            return result[0]
+221
+222        return None
+223
+224    def get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]:
+225        """
+226        Retrieves the matchmaking parameters of a user based on their ID.
+227
+228        Args:
+229            user_id (int): The ID of the user.
+230
+231        Returns:
+232            tuple[float, float]: The mu and sigma values of the user.
+233        """
+234        self.cursor.execute(
+235            f"""SELECT mu, sigma FROM {self.table} WHERE user_id=?""",
+236            (user_id,),
+237        )
+238        return self.cursor.fetchone()
+239
+240    def set_matchmaking_parameters(self, user_id: int, mu: float, sigma: float) -> None:
+241        """
+242        Sets the matchmaking parameters of a user based on their ID.
+243
+244        Args:
+245            user_id (int): The ID of the user.
+246            mu (float): The new mu value of the user.
+247            sigma (float): The new sigma value of the user.
+248        """
+249        self.cursor.execute(
+250            f"""UPDATE {self.table} SET mu=?, sigma=? WHERE user_id=?""",
+251            (mu, sigma, user_id),
+252        )
+253        self.connection.commit()
+
+ + +

Represents a data access object for managing game data in a SQLite database.

+ +

Attributes: + connection (sqlite3.Connection): The connection to the SQLite database. + cursor (sqlite3.Cursor): The cursor for executing SQL queries.

+
+ + +
+ +
+ + UserData(connection: SQLiteConnectionInfo) + + + +
+ +
108    def __init__(self, connection: SQLiteConnectionInfo) -> None:
+109        """
+110        Initializes a new instance of the UserData class.
+111
+112        Args:
+113            connection (SQLiteConnectionInfo): The connection information for SQLite.
+114        """
+115        # connect to the database
+116        self.connection = sqlite3.connect(connection.host)
+117        self.cursor = self.connection.cursor()
+118        self.table = connection.table
+119
+120        self.cursor.execute(
+121            f"""
+122            CREATE TABLE IF NOT EXISTS {connection.table} (
+123            user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+124            username TEXT NOT NULL UNIQUE,
+125            password TEXT NOT NULL,
+126            role TEXT NOT NULL DEFAULT 'user',
+127            token TEXT NOT NULL,
+128            mu FLOAT NOT NULL,
+129            sigma FLOAT NOT NULL
+130            )"""
+131        )
+
+ + +

Initializes a new instance of the UserData class.

+ +

Args: + connection (SQLiteConnectionInfo): The connection information for SQLite.

+
+ + +
+
+
+ connection + + +
+ + + + +
+
+
+ cursor + + +
+ + + + +
+
+
+ table + + +
+ + + + +
+
+ +
+ + def + add( self, user_name: str, user_password: str, user_token: str, user_role=<UserRole.USER: 'user'>, user_mu=25.0, user_sigma=8.333) -> int: + + + +
+ +
133    def add(
+134        self,
+135        user_name: str,
+136        user_password: str,
+137        user_token: str,
+138        user_role=UserRole.USER,
+139        user_mu=25.000,
+140        user_sigma=8.333,
+141    ) -> int:
+142        """
+143        Adds a new user to the database.
+144
+145        Args:
+146            user_name (str): The name of the user.
+147            user_password (str): The password of the user.
+148            user_token (str): The token of the user.
+149            user_role (UserRole, optional): The role of the user.
+150            Defaults to UserRole.USER.
+151            user_mu (float, optional): The mu value of the user. Defaults to 25.
+152            user_sigma (float, optional): The sigma value of the user. Defaults to 8.33.
+153
+154        Returns:
+155            int: The ID of the newly added user.
+156        """
+157
+158        user_role = user_role.value
+159
+160        self.cursor.execute(
+161            f"""INSERT INTO {self.table}(username, password, role, token, mu, sigma)
+162            VALUES (?,?,?,?,?,?)""",
+163            (user_name, user_password, user_role, user_token, user_mu, user_sigma),
+164        )
+165        self.cursor.execute(
+166            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+167            (user_token,),
+168        )
+169        self.connection.commit()
+170        return self.cursor.fetchone()[0]
+
+ + +

Adds a new user to the database.

+ +

Args: + user_name (str): The name of the user. + user_password (str): The password of the user. + user_token (str): The token of the user. + user_role (UserRole, optional): The role of the user. + Defaults to UserRole.USER. + user_mu (float, optional): The mu value of the user. Defaults to 25. + user_sigma (float, optional): The sigma value of the user. Defaults to 8.33.

+ +

Returns: + int: The ID of the newly added user.

+
+ + +
+
+ +
+ + def + remove(self, user_id: int) -> None: + + + +
+ +
172    def remove(self, user_id: int) -> None:
+173        """
+174        Removes a user from the database based on their ID.
+175
+176        Args:
+177            user_id (int): The ID of the user to be removed.
+178        """
+179        self.cursor.execute(
+180            f"""DELETE FROM {self.table} WHERE user_id=?""",
+181            (user_id,),
+182        )
+183        self.connection.commit()
+
+ + +

Removes a user from the database based on their ID.

+ +

Args: + user_id (int): The ID of the user to be removed.

+
+ + +
+
+ +
+ + def + is_verified(self, user_token: str) -> bool: + + + +
+ +
185    def is_verified(self, user_token: str) -> bool:
+186        """
+187        Checks if a user is verified based on their token.
+188
+189        Args:
+190            user_token (str): The token of the user.
+191
+192        Returns:
+193            bool: True if the user is verified, False otherwise.
+194        """
+195        self.cursor.execute(
+196            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+197            (user_token,),
+198        )
+199        result = self.cursor.fetchone()
+200        if result is not None:
+201            return True
+202        return False
+
+ + +

Checks if a user is verified based on their token.

+ +

Args: + user_token (str): The token of the user.

+ +

Returns: + bool: True if the user is verified, False otherwise.

+
+ + +
+
+ +
+ + def + get_user_id(self, user_token: str) -> int | None: + + + +
+ +
204    def get_user_id(self, user_token: str) -> int | None:
+205        """
+206        Retrieves the ID of a user based on their token.
+207
+208        Args:
+209            user_token (str): The token of the user.
+210
+211        Returns:
+212            int: The ID of the user, or -1 if the user is not found.
+213        """
+214        self.cursor.execute(
+215            f"""SELECT user_id FROM {self.table} WHERE token=?""",
+216            (user_token,),
+217        )
+218        result = self.cursor.fetchone()
+219        if result is not None:
+220            return result[0]
+221
+222        return None
+
+ + +

Retrieves the ID of a user based on their token.

+ +

Args: + user_token (str): The token of the user.

+ +

Returns: + int: The ID of the user, or -1 if the user is not found.

+
+ + +
+
+ +
+ + def + get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]: + + + +
+ +
224    def get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]:
+225        """
+226        Retrieves the matchmaking parameters of a user based on their ID.
+227
+228        Args:
+229            user_id (int): The ID of the user.
+230
+231        Returns:
+232            tuple[float, float]: The mu and sigma values of the user.
+233        """
+234        self.cursor.execute(
+235            f"""SELECT mu, sigma FROM {self.table} WHERE user_id=?""",
+236            (user_id,),
+237        )
+238        return self.cursor.fetchone()
+
+ + +

Retrieves the matchmaking parameters of a user based on their ID.

+ +

Args: + user_id (int): The ID of the user.

+ +

Returns: + tuple[float, float]: The mu and sigma values of the user.

+
+ + +
+
+ +
+ + def + set_matchmaking_parameters(self, user_id: int, mu: float, sigma: float) -> None: + + + +
+ +
240    def set_matchmaking_parameters(self, user_id: int, mu: float, sigma: float) -> None:
+241        """
+242        Sets the matchmaking parameters of a user based on their ID.
+243
+244        Args:
+245            user_id (int): The ID of the user.
+246            mu (float): The new mu value of the user.
+247            sigma (float): The new sigma value of the user.
+248        """
+249        self.cursor.execute(
+250            f"""UPDATE {self.table} SET mu=?, sigma=? WHERE user_id=?""",
+251            (mu, sigma, user_id),
+252        )
+253        self.connection.commit()
+
+ + +

Sets the matchmaking parameters of a user based on their ID.

+ +

Args: + user_id (int): The ID of the user. + mu (float): The new mu value of the user. + sigma (float): The new sigma value of the user.

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/interfaces.html b/documentation/comprl/server/interfaces.html new file mode 100644 index 0000000..167c92f --- /dev/null +++ b/documentation/comprl/server/interfaces.html @@ -0,0 +1,1882 @@ + + + + + + + comprl.server.interfaces API documentation + + + + + + + + + +
+
+

+comprl.server.interfaces

+ +

This module contains the interfaces for the non-networking logic.

+
+ + + + + +
  1"""
+  2This module contains the interfaces for the non-networking logic.
+  3"""
+  4
+  5import abc
+  6from typing import Callable, Optional
+  7from datetime import datetime
+  8import numpy as np
+  9import pickle
+ 10
+ 11from comprl.shared.types import GameID, PlayerID
+ 12from comprl.server.util import IDGenerator
+ 13from comprl.server.data.interfaces import GameResult, GameEndState
+ 14
+ 15
+ 16class IAction:
+ 17    """Interface for an action"""
+ 18
+ 19    pass
+ 20
+ 21
+ 22class IPlayer(abc.ABC):
+ 23    """Interface for a player"""
+ 24
+ 25    def __init__(self) -> None:
+ 26        self.id: PlayerID = IDGenerator.generate_player_id()
+ 27        self.user_id: Optional[int] = None
+ 28        self.is_connected = True
+ 29
+ 30    @abc.abstractmethod
+ 31    def authenticate(self, result_callback):
+ 32        """authenticates player
+ 33
+ 34        Args:
+ 35            result_callback (Callable): callback
+ 36        """
+ 37        ...
+ 38
+ 39    @abc.abstractmethod
+ 40    def is_ready(self, result_callback) -> bool:
+ 41        """checks if the player is ready to play
+ 42
+ 43        Returns:
+ 44            bool: returns true if the player is ready to play
+ 45        """
+ 46        ...
+ 47
+ 48    @abc.abstractmethod
+ 49    def notify_start(self, game_id):
+ 50        """notifies player that the game has started"""
+ 51        ...
+ 52
+ 53    @abc.abstractmethod
+ 54    def get_action(self, obv, result_callback) -> IAction:
+ 55        """gets an action from the player
+ 56
+ 57        Args:
+ 58            obv (Any): observation
+ 59            result_callback (Callable): callback
+ 60
+ 61        Returns:
+ 62            IAction: action
+ 63        """
+ 64        ...
+ 65
+ 66    @abc.abstractmethod
+ 67    def notify_end(self, result, stats):
+ 68        """notifies player that the game has ended"""
+ 69        ...
+ 70
+ 71    @abc.abstractmethod
+ 72    def disconnect(self, reason: str):
+ 73        """disconnect the player"""
+ 74        ...
+ 75
+ 76    @abc.abstractmethod
+ 77    def notify_error(self, error: str):
+ 78        """notifies the player of an error"""
+ 79        ...
+ 80
+ 81    @abc.abstractmethod
+ 82    def notify_info(self, msg: str):
+ 83        """notifies the player of an information"""
+ 84        ...
+ 85
+ 86
+ 87class IGame(abc.ABC):
+ 88    """
+ 89    Interface for a game.
+ 90
+ 91    Attributes:
+ 92        id (GameID):
+ 93            The unique identifier of the game.
+ 94        players (dict[PlayerID, IPlayer]):
+ 95            A dictionary of players participating in the game.
+ 96        start_time (datetime):
+ 97            The start time of the game.
+ 98        finish_callbacks (list[Callable[["IGame"], None]]):
+ 99            A list of callbacks to be executed when the game ends.
+100    """
+101
+102    @abc.abstractmethod
+103    def __init__(self, players: list[IPlayer]) -> None:
+104        """
+105        Initializes a new instance of the IGame class.
+106
+107        Args:
+108            players (list[IPlayer]): A list of players participating in the game.
+109        """
+110        self.id: GameID = IDGenerator.generate_game_id()
+111        self.players = {p.id: p for p in players}
+112        self.finish_callbacks: list[Callable[["IGame"], None]] = []
+113        self.scores: dict[PlayerID, float] = {p.id: 0.0 for p in players}
+114        self.start_time = datetime.now()
+115        self.disconnected_player_id: PlayerID | None = None
+116        # dict storing all actions and possible more to be saved later.
+117        # "actions" is a list of all actions in the game
+118        self.game_info: dict[str, list[np.ndarray]] = {}
+119        self.all_actions: list[np.ndarray] = []
+120        # When writing a game class you can fill the dict game_info with more
+121        # information
+122
+123    def add_finish_callback(self, callback: Callable[["IGame"], None]) -> None:
+124        """
+125        Adds a callback function to be executed when the game ends.
+126
+127        Args:
+128            callback (Callable[["IGame"], None]): The callback function to be added.
+129        """
+130        self.finish_callbacks.append(callback)
+131
+132    def start(self):
+133        """
+134        Notifies all players that the game has started and starts the game cycle.
+135        """
+136        self.start_time = datetime.now()
+137
+138        for player in self.players.values():
+139            player.notify_start(self.id)
+140
+141        self._run()
+142
+143    def _end(self, reason="unknown"):
+144        """
+145        Notifies all players that the game has ended and writes all actions in a file.
+146
+147        Args:
+148            reason (str): The reason why the game has ended. Defaults to "unknown".
+149        """
+150
+151        # store actions:
+152        # TODO: maybe add multithreading here to ease the load on the main server thread
+153        # as storing the actions can take a while
+154        self.game_info["actions"] = np.array(self.all_actions)
+155
+156        with open("comprl/server/game_actions/" + str(self.id) + ".pkl", "wb") as f:
+157            pickle.dump(self.game_info, f)
+158
+159        # notify end
+160        for callback in self.finish_callbacks:
+161            callback(self)
+162
+163        for player in self.players.values():
+164            if player.id == self.disconnected_player_id:
+165                continue
+166            player.notify_end(
+167                self._player_won(player.id), self._player_stats(player.id)
+168            )
+169
+170    def _run(self):
+171        """
+172        Collects all actions and puts them in the current_actions list.
+173        """
+174        actions = {}
+175        for p in self.players.values():
+176
+177            def _res(value, id=p.id):
+178                if not self._validate_action(value):
+179                    self.players[id].disconnect("Invalid action")
+180                actions[id] = value
+181                if len(actions) == len(self.players):
+182                    # all players have submitted their actions
+183                    # update the game, and if the game is over, end it
+184                    if self.disconnected_player_id is not None:
+185                        return
+186                    self.all_actions.append([actions[p] for p in actions])
+187                    if not self._update(actions):
+188                        self._run()
+189                    else:
+190                        self._end(reason="Player won")
+191
+192            p.get_action(self._get_observation(p.id), _res)
+193
+194    def force_end(self, player_id: PlayerID):
+195        """forces the end of the game. Should be used when a player disconnects.
+196
+197        Args:
+198            player_id (PlayerID): the player that caused the forced end (disconnected)
+199        """
+200        self.disconnected_player_id = player_id
+201        self._end(reason="Player disconnected")
+202
+203    def get_result(self) -> GameResult | None:
+204        """
+205        Returns the result of the game.
+206
+207        Returns:
+208            GameResult: The result of the game.
+209        """
+210        player_ids = list(self.players.keys())
+211
+212        game_end_state = GameEndState.DRAW
+213        if self._player_won(player_ids[0]) or self._player_won(player_ids[1]):
+214            game_end_state = GameEndState.WIN
+215        if self.disconnected_player_id is not None:
+216            game_end_state = GameEndState.DISCONNECTED
+217
+218        user1_id = self.players[player_ids[0]].user_id
+219        user2_id = self.players[player_ids[1]].user_id
+220
+221        if user1_id is None or user2_id is None:
+222            return None
+223
+224        return GameResult(
+225            game_id=self.id,
+226            user1_id=user1_id,
+227            user2_id=user2_id,
+228            score_user_1=self.scores[player_ids[0]],
+229            score_user_2=self.scores[player_ids[1]],
+230            start_time=self.start_time,
+231            end_state=game_end_state,
+232            is_user1_winner=self._player_won(player_ids[0]),
+233            is_user1_disconnected=(self.disconnected_player_id == player_ids[0]),
+234        )
+235
+236    @abc.abstractmethod
+237    def _update(self, actions: dict[PlayerID, list[float]]) -> bool:
+238        """
+239        Updates the game with the players' actions.
+240
+241        Returns:
+242            bool: True if the game is over, False otherwise.
+243        """
+244        return False
+245
+246    @abc.abstractmethod
+247    def _validate_action(self, action) -> bool:
+248        """
+249        Checks whether an action is valid.
+250
+251        Args:
+252            action: The action to be validated.
+253
+254        Returns:
+255            bool: True if the action is valid, False otherwise.
+256        """
+257        ...
+258
+259    @abc.abstractmethod
+260    def _get_observation(self, id: PlayerID) -> list[float]:
+261        """
+262        Returns the observation for the player.
+263
+264        Args:
+265            id (PlayerID): The ID of the player for which the observation is requested.
+266
+267        Returns:
+268            list[float]: The observation for the player.
+269        """
+270        ...
+271
+272    @abc.abstractmethod
+273    def _player_won(self, id: PlayerID) -> bool:
+274        """
+275        Checks whether the player has won.
+276
+277        Args:
+278            id (PlayerID): The ID of the player to be checked.
+279
+280        Returns:
+281            bool: True if the player has won, False otherwise.
+282        """
+283        ...
+284
+285    @abc.abstractmethod
+286    def _player_stats(self, id: PlayerID) -> list[float]:
+287        """
+288        Returns all stats that should be sent to the player if the game has ended.
+289
+290        Args:
+291            id (PlayerID): The ID of the player.
+292
+293        Returns:
+294            int: The result of the player.
+295        """
+296        ...
+297
+298
+299class IServer:
+300    """
+301    Interface for the server.
+302
+303    This interface defines the methods that a server implementation should provide.
+304    """
+305
+306    @abc.abstractmethod
+307    def on_start(self):
+308        """
+309        Gets called when the server starts.
+310        """
+311        ...
+312
+313    @abc.abstractmethod
+314    def on_stop(self):
+315        """
+316        Gets called when the server stops.
+317        """
+318        ...
+319
+320    @abc.abstractmethod
+321    def on_connect(self, player: IPlayer):
+322        """
+323        Gets called when a player connects.
+324        Args:
+325            player (IPlayer): The player that has connected.
+326        """
+327        ...
+328
+329    @abc.abstractmethod
+330    def on_disconnect(self, player: IPlayer):
+331        """
+332        Gets called when a player disconnects.
+333        Args:
+334            player (IPlayer): The player that has disconnected.
+335        """
+336        ...
+337
+338    @abc.abstractmethod
+339    def on_timeout(self, player: IPlayer, failure, timeout):
+340        """
+341        Gets called when a player has a timeout.
+342        Args:
+343            player (IPlayer): The player that has a timeout.
+344        """
+345        ...
+346
+347    @abc.abstractmethod
+348    def on_remote_error(self, player: IPlayer, error):
+349        """
+350        Gets called when an error in deferred occurs.
+351        Args:
+352            player (IPlayer): The player that caused the error.
+353            error (Exception): Error that occurred
+354        """
+355        ...
+356
+357    @abc.abstractmethod
+358    def on_update(self):
+359        """
+360        Gets called when the server updates.
+361        Frequency depends on the final implementation.
+362        """
+363        ...
+
+ + +
+
+ +
+ + class + IAction: + + + +
+ +
17class IAction:
+18    """Interface for an action"""
+19
+20    pass
+
+ + +

Interface for an action

+
+ + +
+
+ +
+ + class + IPlayer(abc.ABC): + + + +
+ +
23class IPlayer(abc.ABC):
+24    """Interface for a player"""
+25
+26    def __init__(self) -> None:
+27        self.id: PlayerID = IDGenerator.generate_player_id()
+28        self.user_id: Optional[int] = None
+29        self.is_connected = True
+30
+31    @abc.abstractmethod
+32    def authenticate(self, result_callback):
+33        """authenticates player
+34
+35        Args:
+36            result_callback (Callable): callback
+37        """
+38        ...
+39
+40    @abc.abstractmethod
+41    def is_ready(self, result_callback) -> bool:
+42        """checks if the player is ready to play
+43
+44        Returns:
+45            bool: returns true if the player is ready to play
+46        """
+47        ...
+48
+49    @abc.abstractmethod
+50    def notify_start(self, game_id):
+51        """notifies player that the game has started"""
+52        ...
+53
+54    @abc.abstractmethod
+55    def get_action(self, obv, result_callback) -> IAction:
+56        """gets an action from the player
+57
+58        Args:
+59            obv (Any): observation
+60            result_callback (Callable): callback
+61
+62        Returns:
+63            IAction: action
+64        """
+65        ...
+66
+67    @abc.abstractmethod
+68    def notify_end(self, result, stats):
+69        """notifies player that the game has ended"""
+70        ...
+71
+72    @abc.abstractmethod
+73    def disconnect(self, reason: str):
+74        """disconnect the player"""
+75        ...
+76
+77    @abc.abstractmethod
+78    def notify_error(self, error: str):
+79        """notifies the player of an error"""
+80        ...
+81
+82    @abc.abstractmethod
+83    def notify_info(self, msg: str):
+84        """notifies the player of an information"""
+85        ...
+
+ + +

Interface for a player

+
+ + +
+
+ id: uuid.UUID + + +
+ + + + +
+
+
+ user_id: Optional[int] + + +
+ + + + +
+
+
+ is_connected + + +
+ + + + +
+
+ +
+
@abc.abstractmethod
+ + def + authenticate(self, result_callback): + + + +
+ +
31    @abc.abstractmethod
+32    def authenticate(self, result_callback):
+33        """authenticates player
+34
+35        Args:
+36            result_callback (Callable): callback
+37        """
+38        ...
+
+ + +

authenticates player

+ +

Args: + result_callback (Callable): callback

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + is_ready(self, result_callback) -> bool: + + + +
+ +
40    @abc.abstractmethod
+41    def is_ready(self, result_callback) -> bool:
+42        """checks if the player is ready to play
+43
+44        Returns:
+45            bool: returns true if the player is ready to play
+46        """
+47        ...
+
+ + +

checks if the player is ready to play

+ +

Returns: + bool: returns true if the player is ready to play

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + notify_start(self, game_id): + + + +
+ +
49    @abc.abstractmethod
+50    def notify_start(self, game_id):
+51        """notifies player that the game has started"""
+52        ...
+
+ + +

notifies player that the game has started

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + get_action(self, obv, result_callback) -> IAction: + + + +
+ +
54    @abc.abstractmethod
+55    def get_action(self, obv, result_callback) -> IAction:
+56        """gets an action from the player
+57
+58        Args:
+59            obv (Any): observation
+60            result_callback (Callable): callback
+61
+62        Returns:
+63            IAction: action
+64        """
+65        ...
+
+ + +

gets an action from the player

+ +

Args: + obv (Any): observation + result_callback (Callable): callback

+ +

Returns: + IAction: action

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + notify_end(self, result, stats): + + + +
+ +
67    @abc.abstractmethod
+68    def notify_end(self, result, stats):
+69        """notifies player that the game has ended"""
+70        ...
+
+ + +

notifies player that the game has ended

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + disconnect(self, reason: str): + + + +
+ +
72    @abc.abstractmethod
+73    def disconnect(self, reason: str):
+74        """disconnect the player"""
+75        ...
+
+ + +

disconnect the player

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + notify_error(self, error: str): + + + +
+ +
77    @abc.abstractmethod
+78    def notify_error(self, error: str):
+79        """notifies the player of an error"""
+80        ...
+
+ + +

notifies the player of an error

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + notify_info(self, msg: str): + + + +
+ +
82    @abc.abstractmethod
+83    def notify_info(self, msg: str):
+84        """notifies the player of an information"""
+85        ...
+
+ + +

notifies the player of an information

+
+ + +
+
+
+ +
+ + class + IGame(abc.ABC): + + + +
+ +
 88class IGame(abc.ABC):
+ 89    """
+ 90    Interface for a game.
+ 91
+ 92    Attributes:
+ 93        id (GameID):
+ 94            The unique identifier of the game.
+ 95        players (dict[PlayerID, IPlayer]):
+ 96            A dictionary of players participating in the game.
+ 97        start_time (datetime):
+ 98            The start time of the game.
+ 99        finish_callbacks (list[Callable[["IGame"], None]]):
+100            A list of callbacks to be executed when the game ends.
+101    """
+102
+103    @abc.abstractmethod
+104    def __init__(self, players: list[IPlayer]) -> None:
+105        """
+106        Initializes a new instance of the IGame class.
+107
+108        Args:
+109            players (list[IPlayer]): A list of players participating in the game.
+110        """
+111        self.id: GameID = IDGenerator.generate_game_id()
+112        self.players = {p.id: p for p in players}
+113        self.finish_callbacks: list[Callable[["IGame"], None]] = []
+114        self.scores: dict[PlayerID, float] = {p.id: 0.0 for p in players}
+115        self.start_time = datetime.now()
+116        self.disconnected_player_id: PlayerID | None = None
+117        # dict storing all actions and possible more to be saved later.
+118        # "actions" is a list of all actions in the game
+119        self.game_info: dict[str, list[np.ndarray]] = {}
+120        self.all_actions: list[np.ndarray] = []
+121        # When writing a game class you can fill the dict game_info with more
+122        # information
+123
+124    def add_finish_callback(self, callback: Callable[["IGame"], None]) -> None:
+125        """
+126        Adds a callback function to be executed when the game ends.
+127
+128        Args:
+129            callback (Callable[["IGame"], None]): The callback function to be added.
+130        """
+131        self.finish_callbacks.append(callback)
+132
+133    def start(self):
+134        """
+135        Notifies all players that the game has started and starts the game cycle.
+136        """
+137        self.start_time = datetime.now()
+138
+139        for player in self.players.values():
+140            player.notify_start(self.id)
+141
+142        self._run()
+143
+144    def _end(self, reason="unknown"):
+145        """
+146        Notifies all players that the game has ended and writes all actions in a file.
+147
+148        Args:
+149            reason (str): The reason why the game has ended. Defaults to "unknown".
+150        """
+151
+152        # store actions:
+153        # TODO: maybe add multithreading here to ease the load on the main server thread
+154        # as storing the actions can take a while
+155        self.game_info["actions"] = np.array(self.all_actions)
+156
+157        with open("comprl/server/game_actions/" + str(self.id) + ".pkl", "wb") as f:
+158            pickle.dump(self.game_info, f)
+159
+160        # notify end
+161        for callback in self.finish_callbacks:
+162            callback(self)
+163
+164        for player in self.players.values():
+165            if player.id == self.disconnected_player_id:
+166                continue
+167            player.notify_end(
+168                self._player_won(player.id), self._player_stats(player.id)
+169            )
+170
+171    def _run(self):
+172        """
+173        Collects all actions and puts them in the current_actions list.
+174        """
+175        actions = {}
+176        for p in self.players.values():
+177
+178            def _res(value, id=p.id):
+179                if not self._validate_action(value):
+180                    self.players[id].disconnect("Invalid action")
+181                actions[id] = value
+182                if len(actions) == len(self.players):
+183                    # all players have submitted their actions
+184                    # update the game, and if the game is over, end it
+185                    if self.disconnected_player_id is not None:
+186                        return
+187                    self.all_actions.append([actions[p] for p in actions])
+188                    if not self._update(actions):
+189                        self._run()
+190                    else:
+191                        self._end(reason="Player won")
+192
+193            p.get_action(self._get_observation(p.id), _res)
+194
+195    def force_end(self, player_id: PlayerID):
+196        """forces the end of the game. Should be used when a player disconnects.
+197
+198        Args:
+199            player_id (PlayerID): the player that caused the forced end (disconnected)
+200        """
+201        self.disconnected_player_id = player_id
+202        self._end(reason="Player disconnected")
+203
+204    def get_result(self) -> GameResult | None:
+205        """
+206        Returns the result of the game.
+207
+208        Returns:
+209            GameResult: The result of the game.
+210        """
+211        player_ids = list(self.players.keys())
+212
+213        game_end_state = GameEndState.DRAW
+214        if self._player_won(player_ids[0]) or self._player_won(player_ids[1]):
+215            game_end_state = GameEndState.WIN
+216        if self.disconnected_player_id is not None:
+217            game_end_state = GameEndState.DISCONNECTED
+218
+219        user1_id = self.players[player_ids[0]].user_id
+220        user2_id = self.players[player_ids[1]].user_id
+221
+222        if user1_id is None or user2_id is None:
+223            return None
+224
+225        return GameResult(
+226            game_id=self.id,
+227            user1_id=user1_id,
+228            user2_id=user2_id,
+229            score_user_1=self.scores[player_ids[0]],
+230            score_user_2=self.scores[player_ids[1]],
+231            start_time=self.start_time,
+232            end_state=game_end_state,
+233            is_user1_winner=self._player_won(player_ids[0]),
+234            is_user1_disconnected=(self.disconnected_player_id == player_ids[0]),
+235        )
+236
+237    @abc.abstractmethod
+238    def _update(self, actions: dict[PlayerID, list[float]]) -> bool:
+239        """
+240        Updates the game with the players' actions.
+241
+242        Returns:
+243            bool: True if the game is over, False otherwise.
+244        """
+245        return False
+246
+247    @abc.abstractmethod
+248    def _validate_action(self, action) -> bool:
+249        """
+250        Checks whether an action is valid.
+251
+252        Args:
+253            action: The action to be validated.
+254
+255        Returns:
+256            bool: True if the action is valid, False otherwise.
+257        """
+258        ...
+259
+260    @abc.abstractmethod
+261    def _get_observation(self, id: PlayerID) -> list[float]:
+262        """
+263        Returns the observation for the player.
+264
+265        Args:
+266            id (PlayerID): The ID of the player for which the observation is requested.
+267
+268        Returns:
+269            list[float]: The observation for the player.
+270        """
+271        ...
+272
+273    @abc.abstractmethod
+274    def _player_won(self, id: PlayerID) -> bool:
+275        """
+276        Checks whether the player has won.
+277
+278        Args:
+279            id (PlayerID): The ID of the player to be checked.
+280
+281        Returns:
+282            bool: True if the player has won, False otherwise.
+283        """
+284        ...
+285
+286    @abc.abstractmethod
+287    def _player_stats(self, id: PlayerID) -> list[float]:
+288        """
+289        Returns all stats that should be sent to the player if the game has ended.
+290
+291        Args:
+292            id (PlayerID): The ID of the player.
+293
+294        Returns:
+295            int: The result of the player.
+296        """
+297        ...
+
+ + +

Interface for a game.

+ +

Attributes: + id (GameID): + The unique identifier of the game. + players (dict[PlayerID, IPlayer]): + A dictionary of players participating in the game. + start_time (datetime): + The start time of the game. + finish_callbacks (list[Callable[["IGame"], None]]): + A list of callbacks to be executed when the game ends.

+
+ + +
+ +
+
@abc.abstractmethod
+ + IGame(players: list[IPlayer]) + + + +
+ +
103    @abc.abstractmethod
+104    def __init__(self, players: list[IPlayer]) -> None:
+105        """
+106        Initializes a new instance of the IGame class.
+107
+108        Args:
+109            players (list[IPlayer]): A list of players participating in the game.
+110        """
+111        self.id: GameID = IDGenerator.generate_game_id()
+112        self.players = {p.id: p for p in players}
+113        self.finish_callbacks: list[Callable[["IGame"], None]] = []
+114        self.scores: dict[PlayerID, float] = {p.id: 0.0 for p in players}
+115        self.start_time = datetime.now()
+116        self.disconnected_player_id: PlayerID | None = None
+117        # dict storing all actions and possible more to be saved later.
+118        # "actions" is a list of all actions in the game
+119        self.game_info: dict[str, list[np.ndarray]] = {}
+120        self.all_actions: list[np.ndarray] = []
+121        # When writing a game class you can fill the dict game_info with more
+122        # information
+
+ + +

Initializes a new instance of the IGame class.

+ +

Args: + players (list[IPlayer]): A list of players participating in the game.

+
+ + +
+
+
+ id: uuid.UUID + + +
+ + + + +
+
+
+ players + + +
+ + + + +
+
+
+ finish_callbacks: list[typing.Callable[[IGame], NoneType]] + + +
+ + + + +
+
+
+ scores: dict[uuid.UUID, float] + + +
+ + + + +
+
+
+ start_time + + +
+ + + + +
+
+
+ disconnected_player_id: uuid.UUID | None + + +
+ + + + +
+
+
+ game_info: dict[str, list[numpy.ndarray]] + + +
+ + + + +
+
+
+ all_actions: list[numpy.ndarray] + + +
+ + + + +
+
+ +
+ + def + add_finish_callback( self, callback: Callable[[IGame], NoneType]) -> None: + + + +
+ +
124    def add_finish_callback(self, callback: Callable[["IGame"], None]) -> None:
+125        """
+126        Adds a callback function to be executed when the game ends.
+127
+128        Args:
+129            callback (Callable[["IGame"], None]): The callback function to be added.
+130        """
+131        self.finish_callbacks.append(callback)
+
+ + +

Adds a callback function to be executed when the game ends.

+ +

Args: + callback (Callable[["IGame"], None]): The callback function to be added.

+
+ + +
+
+ +
+ + def + start(self): + + + +
+ +
133    def start(self):
+134        """
+135        Notifies all players that the game has started and starts the game cycle.
+136        """
+137        self.start_time = datetime.now()
+138
+139        for player in self.players.values():
+140            player.notify_start(self.id)
+141
+142        self._run()
+
+ + +

Notifies all players that the game has started and starts the game cycle.

+
+ + +
+
+ +
+ + def + force_end(self, player_id: uuid.UUID): + + + +
+ +
195    def force_end(self, player_id: PlayerID):
+196        """forces the end of the game. Should be used when a player disconnects.
+197
+198        Args:
+199            player_id (PlayerID): the player that caused the forced end (disconnected)
+200        """
+201        self.disconnected_player_id = player_id
+202        self._end(reason="Player disconnected")
+
+ + +

forces the end of the game. Should be used when a player disconnects.

+ +

Args: + player_id (PlayerID): the player that caused the forced end (disconnected)

+
+ + +
+
+ +
+ + def + get_result(self) -> comprl.server.data.interfaces.GameResult | None: + + + +
+ +
204    def get_result(self) -> GameResult | None:
+205        """
+206        Returns the result of the game.
+207
+208        Returns:
+209            GameResult: The result of the game.
+210        """
+211        player_ids = list(self.players.keys())
+212
+213        game_end_state = GameEndState.DRAW
+214        if self._player_won(player_ids[0]) or self._player_won(player_ids[1]):
+215            game_end_state = GameEndState.WIN
+216        if self.disconnected_player_id is not None:
+217            game_end_state = GameEndState.DISCONNECTED
+218
+219        user1_id = self.players[player_ids[0]].user_id
+220        user2_id = self.players[player_ids[1]].user_id
+221
+222        if user1_id is None or user2_id is None:
+223            return None
+224
+225        return GameResult(
+226            game_id=self.id,
+227            user1_id=user1_id,
+228            user2_id=user2_id,
+229            score_user_1=self.scores[player_ids[0]],
+230            score_user_2=self.scores[player_ids[1]],
+231            start_time=self.start_time,
+232            end_state=game_end_state,
+233            is_user1_winner=self._player_won(player_ids[0]),
+234            is_user1_disconnected=(self.disconnected_player_id == player_ids[0]),
+235        )
+
+ + +

Returns the result of the game.

+ +

Returns: + GameResult: The result of the game.

+
+ + +
+
+
+ +
+ + class + IServer: + + + +
+ +
300class IServer:
+301    """
+302    Interface for the server.
+303
+304    This interface defines the methods that a server implementation should provide.
+305    """
+306
+307    @abc.abstractmethod
+308    def on_start(self):
+309        """
+310        Gets called when the server starts.
+311        """
+312        ...
+313
+314    @abc.abstractmethod
+315    def on_stop(self):
+316        """
+317        Gets called when the server stops.
+318        """
+319        ...
+320
+321    @abc.abstractmethod
+322    def on_connect(self, player: IPlayer):
+323        """
+324        Gets called when a player connects.
+325        Args:
+326            player (IPlayer): The player that has connected.
+327        """
+328        ...
+329
+330    @abc.abstractmethod
+331    def on_disconnect(self, player: IPlayer):
+332        """
+333        Gets called when a player disconnects.
+334        Args:
+335            player (IPlayer): The player that has disconnected.
+336        """
+337        ...
+338
+339    @abc.abstractmethod
+340    def on_timeout(self, player: IPlayer, failure, timeout):
+341        """
+342        Gets called when a player has a timeout.
+343        Args:
+344            player (IPlayer): The player that has a timeout.
+345        """
+346        ...
+347
+348    @abc.abstractmethod
+349    def on_remote_error(self, player: IPlayer, error):
+350        """
+351        Gets called when an error in deferred occurs.
+352        Args:
+353            player (IPlayer): The player that caused the error.
+354            error (Exception): Error that occurred
+355        """
+356        ...
+357
+358    @abc.abstractmethod
+359    def on_update(self):
+360        """
+361        Gets called when the server updates.
+362        Frequency depends on the final implementation.
+363        """
+364        ...
+
+ + +

Interface for the server.

+ +

This interface defines the methods that a server implementation should provide.

+
+ + +
+ +
+
@abc.abstractmethod
+ + def + on_start(self): + + + +
+ +
307    @abc.abstractmethod
+308    def on_start(self):
+309        """
+310        Gets called when the server starts.
+311        """
+312        ...
+
+ + +

Gets called when the server starts.

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + on_stop(self): + + + +
+ +
314    @abc.abstractmethod
+315    def on_stop(self):
+316        """
+317        Gets called when the server stops.
+318        """
+319        ...
+
+ + +

Gets called when the server stops.

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + on_connect(self, player: IPlayer): + + + +
+ +
321    @abc.abstractmethod
+322    def on_connect(self, player: IPlayer):
+323        """
+324        Gets called when a player connects.
+325        Args:
+326            player (IPlayer): The player that has connected.
+327        """
+328        ...
+
+ + +

Gets called when a player connects. +Args: + player (IPlayer): The player that has connected.

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + on_disconnect(self, player: IPlayer): + + + +
+ +
330    @abc.abstractmethod
+331    def on_disconnect(self, player: IPlayer):
+332        """
+333        Gets called when a player disconnects.
+334        Args:
+335            player (IPlayer): The player that has disconnected.
+336        """
+337        ...
+
+ + +

Gets called when a player disconnects. +Args: + player (IPlayer): The player that has disconnected.

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + on_timeout(self, player: IPlayer, failure, timeout): + + + +
+ +
339    @abc.abstractmethod
+340    def on_timeout(self, player: IPlayer, failure, timeout):
+341        """
+342        Gets called when a player has a timeout.
+343        Args:
+344            player (IPlayer): The player that has a timeout.
+345        """
+346        ...
+
+ + +

Gets called when a player has a timeout. +Args: + player (IPlayer): The player that has a timeout.

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + on_remote_error(self, player: IPlayer, error): + + + +
+ +
348    @abc.abstractmethod
+349    def on_remote_error(self, player: IPlayer, error):
+350        """
+351        Gets called when an error in deferred occurs.
+352        Args:
+353            player (IPlayer): The player that caused the error.
+354            error (Exception): Error that occurred
+355        """
+356        ...
+
+ + +

Gets called when an error in deferred occurs. +Args: + player (IPlayer): The player that caused the error. + error (Exception): Error that occurred

+
+ + +
+
+ +
+
@abc.abstractmethod
+ + def + on_update(self): + + + +
+ +
358    @abc.abstractmethod
+359    def on_update(self):
+360        """
+361        Gets called when the server updates.
+362        Frequency depends on the final implementation.
+363        """
+364        ...
+
+ + +

Gets called when the server updates. +Frequency depends on the final implementation.

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/managers.html b/documentation/comprl/server/managers.html new file mode 100644 index 0000000..8a1ffb9 --- /dev/null +++ b/documentation/comprl/server/managers.html @@ -0,0 +1,2148 @@ + + + + + + + comprl.server.managers API documentation + + + + + + + + + +
+
+

+comprl.server.managers

+ +

This module contains classes that manage game instances and players.

+
+ + + + + +
  1"""
+  2This module contains classes that manage game instances and players.
+  3"""
+  4
+  5import logging as log
+  6import pickle
+  7from typing import Type
+  8from datetime import datetime
+  9from openskill.models import PlackettLuce
+ 10from typing import TypeAlias
+ 11import numpy as np
+ 12
+ 13from comprl.server.interfaces import IGame, IPlayer
+ 14from comprl.shared.types import GameID, PlayerID
+ 15from comprl.server.data import GameData, UserData
+ 16from comprl.server.util import ConfigProvider
+ 17
+ 18
+ 19class GameManager:
+ 20    """
+ 21    A class that manages game instances of a specific game type.
+ 22
+ 23    Attributes:
+ 24        games (dict[GameID, IGame]): A dictionary that stores active game instances.
+ 25        game_type (Type[IGame]): The type of game to be managed.
+ 26    """
+ 27
+ 28    def __init__(self, game_type: Type[IGame]) -> None:
+ 29        self.games: dict[GameID, IGame] = {}
+ 30        self.game_type = game_type
+ 31
+ 32    def start_game(self, players: list[IPlayer]) -> IGame:
+ 33        """
+ 34        Starts a new game instance with the given players.
+ 35
+ 36        Args:
+ 37            players (list[IPlayer]): A list of players participating in the game.
+ 38
+ 39        Returns:
+ 40            GameID: The ID of the newly started game.
+ 41        """
+ 42        game = self.game_type(players)
+ 43        self.games[game.id] = game
+ 44
+ 45        log.debug("Game started with players: " + str([p.id for p in players]))
+ 46
+ 47        game.add_finish_callback(self.end_game)
+ 48        game.start()
+ 49
+ 50        return game
+ 51
+ 52    def end_game(self, game: IGame) -> None:
+ 53        """
+ 54        Ends the game instance with the specified ID.
+ 55
+ 56        Args:
+ 57            game_id (GameID): The ID of the game to be ended.
+ 58        """
+ 59
+ 60        if game.id in self.games:
+ 61            game_result = game.get_result()
+ 62            if game_result is not None:
+ 63                GameData(ConfigProvider.get("game_data")).add(game_result)
+ 64            else:
+ 65                log.error(f"Game had no valid result. Game-ID: {game.id}")
+ 66            del self.games[game.id]
+ 67
+ 68    def force_game_end(self, player_id: PlayerID):
+ 69        """Forces all games, that a player is currently playing, to end.
+ 70
+ 71        Args:
+ 72            player_id (PlayerID): id of the player
+ 73        """
+ 74        involved_games: list[IGame] = []
+ 75        for _, game in self.games.items():
+ 76            for game_player_id in game.players:
+ 77                if player_id == game_player_id:
+ 78                    involved_games.append(game)
+ 79                    break
+ 80        for game in involved_games:
+ 81            log.debug("Game was forced to end because of a disconnected player")
+ 82            game.force_end(player_id=player_id)
+ 83
+ 84    def get(self, game_id: GameID) -> IGame | None:
+ 85        """
+ 86        Retrieves the game instance with the specified ID.
+ 87
+ 88        Args:
+ 89            game_id (GameID): The ID of the game to be retrieved.
+ 90
+ 91        Returns:
+ 92            Optional[IGame]: The game instance if found, None otherwise.
+ 93        """
+ 94        return self.games.get(game_id, None)
+ 95
+ 96    def get_stored_actions(self, game_id: GameID) -> dict[str, list[np.ndarray]]:
+ 97        """get a game from the log file
+ 98
+ 99        Args:
+100            game_id (GameID): id of the game we want to get
+101        Returns:
+102            dict[str, list[np.ndarray]]: the dict containing the actions and possible
+103            more info
+104        """
+105        with open("comprl/server/game_actions/" + str(game_id) + ".pkl", "rb") as f:
+106            return pickle.load(f)
+107
+108
+109class PlayerManager:
+110    """
+111    Manages connected players.
+112    """
+113
+114    def __init__(self) -> None:
+115        self.auth_players: dict[PlayerID, tuple[IPlayer, int]] = {}
+116        self.connected_players: dict[PlayerID, IPlayer] = {}
+117
+118    def add(self, player: IPlayer) -> None:
+119        """
+120        Adds a player to the manager.
+121
+122        Args:
+123            player (IPlayer): The player object to be added.
+124
+125        Returns:
+126            None
+127        """
+128        self.connected_players[player.id] = player
+129
+130    def auth(self, player_id: PlayerID, token: str) -> bool:
+131        """
+132        Authenticates a player using their player ID and token.
+133
+134        Args:
+135            player_id (PlayerID): The ID of the player.
+136            token (str): The authentication token.
+137
+138        Returns:
+139            bool: True if the authentication is successful, False otherwise.
+140        """
+141        player = self.connected_players.get(player_id, None)
+142        # the player might have disconnected?
+143        if player is None:
+144            return False
+145
+146        id = UserData(ConfigProvider.get("user_data")).get_user_id(token)
+147
+148        if id is not None:
+149            # add player to authenticated players
+150            self.auth_players[player_id] = (self.connected_players[player_id], id)
+151            # set user_id of player
+152            player.user_id = id
+153            log.debug(f"Player {player_id} authenticated")
+154            return True
+155
+156        return False
+157
+158    def remove(self, player: IPlayer) -> None:
+159        """
+160        Removes a player from the manager.
+161
+162        Args:
+163            player (IPlayer): The player object to be removed.
+164
+165        Returns:
+166            None
+167        """
+168        if player.id in self.connected_players:
+169            del self.connected_players[player.id]
+170
+171            if player.id in self.auth_players:
+172                del self.auth_players[player.id]
+173
+174    def get_user_id(self, player_id: PlayerID) -> int | None:
+175        """
+176        Retrieves the user ID associated with a player.
+177
+178        Args:
+179            player_id (PlayerID): The ID of the player.
+180
+181        Returns:
+182            Optional[int]: The user ID if found, None otherwise.
+183        """
+184        if player_id in self.auth_players:
+185            return self.auth_players[player_id][1]
+186        return None
+187
+188    def get_player_by_id(self, player_id: PlayerID) -> IPlayer | None:
+189        """
+190        Retrieves the player object associated with a player ID.
+191        This only works for authenticated players.
+192
+193        Args:
+194            player_id (PlayerID): The ID of the player.
+195
+196        Returns:
+197            Optional[IPlayer]: The player object if found, None otherwise.
+198        """
+199        if player_id in self.auth_players:
+200            return self.auth_players[player_id][0]
+201        return None
+202
+203    def broadcast_error(self, msg: str) -> None:
+204        """
+205        Broadcasts a message to all connected players.
+206
+207        Args:
+208            msg (str): The message to be broadcasted.
+209
+210        Returns:
+211            None
+212        """
+213
+214        for player in self.connected_players.values():
+215            player.notify_error(msg)
+216
+217    def disconnect_all(self, reason: str) -> None:
+218        """
+219        Disconnects all connected players.
+220
+221        Args:
+222            reason (str): The reason for disconnection.
+223
+224        Returns:
+225            None
+226        """
+227
+228        for player in self.connected_players.values():
+229            player.disconnect(reason)
+230
+231    def get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]:
+232        """
+233        Retrieves the matchmaking parameters of a user based on their ID.
+234
+235        Args:
+236            user_id (int): The ID of the user.
+237
+238        Returns:
+239            tuple[float, float]: The mu and sigma values of the user.
+240        """
+241        return UserData(ConfigProvider.get("user_data")).get_matchmaking_parameters(
+242            user_id
+243        )
+244
+245    def update_matchmaking_parameters(
+246        self, user_id: int, new_mu: float, new_sigma: float
+247    ) -> None:
+248        """
+249        Updates the matchmaking parameters of a user based on their ID.
+250
+251        Args:
+252            user_id (int): The ID of the user.
+253            new_mu (float): The new mu value of the user.
+254            new_sigma (float): The new sigma value of the user.
+255        """
+256        UserData(ConfigProvider.get("user_data")).set_matchmaking_parameters(
+257            user_id, new_mu, new_sigma
+258        )
+259
+260
+261# Type of a player entry in the queue, containing the player ID, user ID, mu, sigma
+262# and time they joined the queue
+263QueuePlayer: TypeAlias = tuple[PlayerID, int, float, float, datetime]
+264
+265
+266class MatchmakingManager:
+267    """handles matchmaking between players and starts the game"""
+268
+269    def __init__(
+270        self, player_manager: PlayerManager, game_manager: GameManager
+271    ) -> None:
+272        """
+273        Initializes a MatchmakingManager object.
+274
+275        Args:
+276            player_manager (PlayerManager): The player manager object.
+277            game_manager (GameManager): The game manager object.
+278        """
+279        self.player_manager = player_manager
+280        self.game_manager = game_manager
+281
+282        # queue storing player id, mu, sigma and time they joined the queue
+283        self._queue: list[QueuePlayer] = []
+284        # The model used for matchmaking
+285        self.model = PlackettLuce()
+286        self._MATCH_QUALITY_THRESHOLD = 0.8
+287        self._PERCENTAGE_MIN_PLAYERS_WAITING = 0.1
+288
+289    def try_match(self, player_id: PlayerID) -> None:
+290        """
+291        Tries to add a player with the given player ID to the matchmaking queue.
+292
+293        Args:
+294            player_id (PlayerID): The ID of the player to match.
+295
+296        Returns:
+297            None
+298        """
+299        player = self.player_manager.get_player_by_id(player_id)
+300        if player is not None:
+301            # FIXME: we might wan't to kick the player
+302
+303            def __match(ready: bool):
+304                if ready:
+305                    player.notify_info(msg="Waiting in queue")
+306                    self.match(player_id)
+307
+308            player.is_ready(result_callback=__match)
+309
+310    def match(self, player_id: PlayerID) -> None:
+311        """
+312        Adds player to the queue.
+313
+314        Args:
+315            player_id (PlayerID): The ID of the player to be matched.
+316        """
+317        user_id = self.player_manager.get_user_id(player_id)
+318        if user_id is None:
+319            log.error(f"Player {player_id} is not authenticated but tried to queue.")
+320            return
+321        mu, sigma = self.player_manager.get_matchmaking_parameters(user_id)
+322
+323        # check if enough players are waiting
+324        self._queue.append((player_id, user_id, mu, sigma, datetime.now()))
+325
+326        log.debug(f"Player {player_id} was added to the queue")
+327
+328        return
+329
+330    def remove(self, player_id: PlayerID) -> None:
+331        """
+332        Removes a player from the matchmaking queue.
+333
+334        Args:
+335            player_id (PlayerID): The ID of the player to be removed.
+336        """
+337        self._queue = [
+338            (p_id, u_id, mu, sigma, time)
+339            for p_id, u_id, mu, sigma, time in self._queue
+340            if (p_id != player_id)
+341        ]
+342
+343    def _update(self, start_index: int = 0) -> None:
+344        """
+345        Updates the matchmaking manager.
+346
+347        start_index (int, optional): The position in queue to start matching from.
+348        Used for recursion. Defaults to 0.
+349        """
+350
+351        if len(self._queue) < self._min_players_waiting():
+352            return
+353
+354        for i in range(start_index, len(self._queue)):
+355            for j in range(i + 1, len(self._queue)):
+356                # try to match all players against each other
+357                if self._try_start_game(self._queue[i], self._queue[j]):
+358                    # players are matched and removed from queue. continue searching
+359                    self._update(i)
+360                    return
+361        return
+362
+363    def _min_players_waiting(self) -> int:
+364        """
+365        Returns the minimum number of players that need to be waiting in the queue.
+366
+367        Returns:
+368            int: The minimum number of players.
+369        """
+370        return int(
+371            len(self.player_manager.auth_players) * self._PERCENTAGE_MIN_PLAYERS_WAITING
+372        )
+373
+374    def _try_start_game(self, player1: QueuePlayer, player2: QueuePlayer) -> bool:
+375        """
+376        Tries to start a game with the given players.
+377
+378        Args:
+379            player1 (QueuePlayer): The first player.
+380            player2 (QueuePlayer): The second player.
+381
+382        Returns:
+383            bool: True if the game was started, False otherwise.
+384        """
+385        player1_id, user1_id, _, _, _ = player1
+386        player2_id, user2_id, _, _, _ = player2
+387        match_quality = self._rate_match_quality(player1, player2)
+388        # prevent the user from playing against himself
+389        if user1_id == user2_id:
+390            return False
+391
+392        if match_quality > self._MATCH_QUALITY_THRESHOLD:
+393            # match the players. We could search for best match but using the first adds
+394            # a bit of diversity and the players in front of the queue are waiting
+395            # longer, so its fairer for them.
+396
+397            players = [
+398                self.player_manager.get_player_by_id(player1_id),
+399                self.player_manager.get_player_by_id(player2_id),
+400            ]
+401
+402            filtered_players = [player for player in players if player is not None]
+403
+404            if len(filtered_players) != 2:
+405                log.error("Player was in queue but not in player manager")
+406                if players[0] is None:
+407                    self.remove(player1_id)
+408                if players[1] is None:
+409                    self.remove(player2_id)
+410                return False
+411
+412            self.remove(player1_id)
+413            self.remove(player2_id)
+414
+415            game = self.game_manager.start_game(filtered_players)
+416            game.add_finish_callback(self._end_game)
+417            return True
+418        return False
+419
+420    def _rate_match_quality(self, player1: QueuePlayer, player2: QueuePlayer) -> float:
+421        """
+422        Rates the match quality between two players.
+423
+424        Args:
+425            player1 (QueuePlayer): The first player.
+426            player2 (QueuePlayer): The second player.
+427
+428        Returns:
+429            float: The match quality.
+430        """
+431        _, _, mu_p1, sigma_p1, time_stamp_p1 = player1
+432        _, _, mu_p2, sigma_p2, time_stamp_p2 = player2
+433        now = datetime.now()
+434        waiting_time_p1 = (now - time_stamp_p1).total_seconds()
+435        waiting_time_p2 = (now - time_stamp_p2).total_seconds()
+436        combined_waiting_time = waiting_time_p1 + waiting_time_p2
+437        # calculate a bonus if the players waited a long time
+438        waiting_bonus = max(0.0, (combined_waiting_time / 60 - 1) * 0.1)
+439        # TODO play with this function. Maybe even use polynomial or exponential growth,
+440        # depending on waiting time
+441
+442        rating_p1 = self.model.create_rating([mu_p1, sigma_p1], "player1")
+443        rating_p2 = self.model.create_rating([mu_p2, sigma_p2], "player2")
+444        draw_prob = self.model.predict_draw([[rating_p1], [rating_p2]])
+445        return draw_prob + waiting_bonus
+446
+447    def _end_game(self, game: IGame) -> None:
+448        """
+449        Readds players to queue after game has ended.
+450
+451        Args:
+452            game (IGame): The game to be ended.
+453        """
+454        # update elo values
+455        result = game.get_result()
+456        if result is not None:
+457            mu_p1, sigma_p1 = self.player_manager.get_matchmaking_parameters(
+458                result.user1_id
+459            )
+460            mu_p2, sigma_p2 = self.player_manager.get_matchmaking_parameters(
+461                result.user2_id
+462            )
+463            rating_p1 = self.model.create_rating([mu_p1, sigma_p1], "player1")
+464            rating_p2 = self.model.create_rating([mu_p2, sigma_p2], "player2")
+465            [[p1], [p2]] = self.model.rate(
+466                [[rating_p1], [rating_p2]],
+467                scores=[result.score_user_1, result.score_user_2],
+468            )
+469            self.player_manager.update_matchmaking_parameters(
+470                result.user1_id, p1.mu, p1.sigma
+471            )
+472            self.player_manager.update_matchmaking_parameters(
+473                result.user2_id, p2.mu, p2.sigma
+474            )
+475
+476        for _, p in game.players.items():
+477            self.try_match(p.id)
+
+ + +
+
+ +
+ + class + GameManager: + + + +
+ +
 20class GameManager:
+ 21    """
+ 22    A class that manages game instances of a specific game type.
+ 23
+ 24    Attributes:
+ 25        games (dict[GameID, IGame]): A dictionary that stores active game instances.
+ 26        game_type (Type[IGame]): The type of game to be managed.
+ 27    """
+ 28
+ 29    def __init__(self, game_type: Type[IGame]) -> None:
+ 30        self.games: dict[GameID, IGame] = {}
+ 31        self.game_type = game_type
+ 32
+ 33    def start_game(self, players: list[IPlayer]) -> IGame:
+ 34        """
+ 35        Starts a new game instance with the given players.
+ 36
+ 37        Args:
+ 38            players (list[IPlayer]): A list of players participating in the game.
+ 39
+ 40        Returns:
+ 41            GameID: The ID of the newly started game.
+ 42        """
+ 43        game = self.game_type(players)
+ 44        self.games[game.id] = game
+ 45
+ 46        log.debug("Game started with players: " + str([p.id for p in players]))
+ 47
+ 48        game.add_finish_callback(self.end_game)
+ 49        game.start()
+ 50
+ 51        return game
+ 52
+ 53    def end_game(self, game: IGame) -> None:
+ 54        """
+ 55        Ends the game instance with the specified ID.
+ 56
+ 57        Args:
+ 58            game_id (GameID): The ID of the game to be ended.
+ 59        """
+ 60
+ 61        if game.id in self.games:
+ 62            game_result = game.get_result()
+ 63            if game_result is not None:
+ 64                GameData(ConfigProvider.get("game_data")).add(game_result)
+ 65            else:
+ 66                log.error(f"Game had no valid result. Game-ID: {game.id}")
+ 67            del self.games[game.id]
+ 68
+ 69    def force_game_end(self, player_id: PlayerID):
+ 70        """Forces all games, that a player is currently playing, to end.
+ 71
+ 72        Args:
+ 73            player_id (PlayerID): id of the player
+ 74        """
+ 75        involved_games: list[IGame] = []
+ 76        for _, game in self.games.items():
+ 77            for game_player_id in game.players:
+ 78                if player_id == game_player_id:
+ 79                    involved_games.append(game)
+ 80                    break
+ 81        for game in involved_games:
+ 82            log.debug("Game was forced to end because of a disconnected player")
+ 83            game.force_end(player_id=player_id)
+ 84
+ 85    def get(self, game_id: GameID) -> IGame | None:
+ 86        """
+ 87        Retrieves the game instance with the specified ID.
+ 88
+ 89        Args:
+ 90            game_id (GameID): The ID of the game to be retrieved.
+ 91
+ 92        Returns:
+ 93            Optional[IGame]: The game instance if found, None otherwise.
+ 94        """
+ 95        return self.games.get(game_id, None)
+ 96
+ 97    def get_stored_actions(self, game_id: GameID) -> dict[str, list[np.ndarray]]:
+ 98        """get a game from the log file
+ 99
+100        Args:
+101            game_id (GameID): id of the game we want to get
+102        Returns:
+103            dict[str, list[np.ndarray]]: the dict containing the actions and possible
+104            more info
+105        """
+106        with open("comprl/server/game_actions/" + str(game_id) + ".pkl", "rb") as f:
+107            return pickle.load(f)
+
+ + +

A class that manages game instances of a specific game type.

+ +

Attributes: + games (dict[GameID, IGame]): A dictionary that stores active game instances. + game_type (Type[IGame]): The type of game to be managed.

+
+ + +
+ +
+ + GameManager(game_type: Type[comprl.server.interfaces.IGame]) + + + +
+ +
29    def __init__(self, game_type: Type[IGame]) -> None:
+30        self.games: dict[GameID, IGame] = {}
+31        self.game_type = game_type
+
+ + + + +
+
+
+ games: dict[uuid.UUID, comprl.server.interfaces.IGame] + + +
+ + + + +
+
+
+ game_type + + +
+ + + + +
+
+ +
+ + def + start_game( self, players: list[comprl.server.interfaces.IPlayer]) -> comprl.server.interfaces.IGame: + + + +
+ +
33    def start_game(self, players: list[IPlayer]) -> IGame:
+34        """
+35        Starts a new game instance with the given players.
+36
+37        Args:
+38            players (list[IPlayer]): A list of players participating in the game.
+39
+40        Returns:
+41            GameID: The ID of the newly started game.
+42        """
+43        game = self.game_type(players)
+44        self.games[game.id] = game
+45
+46        log.debug("Game started with players: " + str([p.id for p in players]))
+47
+48        game.add_finish_callback(self.end_game)
+49        game.start()
+50
+51        return game
+
+ + +

Starts a new game instance with the given players.

+ +

Args: + players (list[IPlayer]): A list of players participating in the game.

+ +

Returns: + GameID: The ID of the newly started game.

+
+ + +
+
+ +
+ + def + end_game(self, game: comprl.server.interfaces.IGame) -> None: + + + +
+ +
53    def end_game(self, game: IGame) -> None:
+54        """
+55        Ends the game instance with the specified ID.
+56
+57        Args:
+58            game_id (GameID): The ID of the game to be ended.
+59        """
+60
+61        if game.id in self.games:
+62            game_result = game.get_result()
+63            if game_result is not None:
+64                GameData(ConfigProvider.get("game_data")).add(game_result)
+65            else:
+66                log.error(f"Game had no valid result. Game-ID: {game.id}")
+67            del self.games[game.id]
+
+ + +

Ends the game instance with the specified ID.

+ +

Args: + game_id (GameID): The ID of the game to be ended.

+
+ + +
+
+ +
+ + def + force_game_end(self, player_id: uuid.UUID): + + + +
+ +
69    def force_game_end(self, player_id: PlayerID):
+70        """Forces all games, that a player is currently playing, to end.
+71
+72        Args:
+73            player_id (PlayerID): id of the player
+74        """
+75        involved_games: list[IGame] = []
+76        for _, game in self.games.items():
+77            for game_player_id in game.players:
+78                if player_id == game_player_id:
+79                    involved_games.append(game)
+80                    break
+81        for game in involved_games:
+82            log.debug("Game was forced to end because of a disconnected player")
+83            game.force_end(player_id=player_id)
+
+ + +

Forces all games, that a player is currently playing, to end.

+ +

Args: + player_id (PlayerID): id of the player

+
+ + +
+
+ +
+ + def + get(self, game_id: uuid.UUID) -> comprl.server.interfaces.IGame | None: + + + +
+ +
85    def get(self, game_id: GameID) -> IGame | None:
+86        """
+87        Retrieves the game instance with the specified ID.
+88
+89        Args:
+90            game_id (GameID): The ID of the game to be retrieved.
+91
+92        Returns:
+93            Optional[IGame]: The game instance if found, None otherwise.
+94        """
+95        return self.games.get(game_id, None)
+
+ + +

Retrieves the game instance with the specified ID.

+ +

Args: + game_id (GameID): The ID of the game to be retrieved.

+ +

Returns: + Optional[IGame]: The game instance if found, None otherwise.

+
+ + +
+
+ +
+ + def + get_stored_actions(self, game_id: uuid.UUID) -> dict[str, list[numpy.ndarray]]: + + + +
+ +
 97    def get_stored_actions(self, game_id: GameID) -> dict[str, list[np.ndarray]]:
+ 98        """get a game from the log file
+ 99
+100        Args:
+101            game_id (GameID): id of the game we want to get
+102        Returns:
+103            dict[str, list[np.ndarray]]: the dict containing the actions and possible
+104            more info
+105        """
+106        with open("comprl/server/game_actions/" + str(game_id) + ".pkl", "rb") as f:
+107            return pickle.load(f)
+
+ + +

get a game from the log file

+ +

Args: + game_id (GameID): id of the game we want to get +Returns: + dict[str, list[np.ndarray]]: the dict containing the actions and possible + more info

+
+ + +
+
+
+ +
+ + class + PlayerManager: + + + +
+ +
110class PlayerManager:
+111    """
+112    Manages connected players.
+113    """
+114
+115    def __init__(self) -> None:
+116        self.auth_players: dict[PlayerID, tuple[IPlayer, int]] = {}
+117        self.connected_players: dict[PlayerID, IPlayer] = {}
+118
+119    def add(self, player: IPlayer) -> None:
+120        """
+121        Adds a player to the manager.
+122
+123        Args:
+124            player (IPlayer): The player object to be added.
+125
+126        Returns:
+127            None
+128        """
+129        self.connected_players[player.id] = player
+130
+131    def auth(self, player_id: PlayerID, token: str) -> bool:
+132        """
+133        Authenticates a player using their player ID and token.
+134
+135        Args:
+136            player_id (PlayerID): The ID of the player.
+137            token (str): The authentication token.
+138
+139        Returns:
+140            bool: True if the authentication is successful, False otherwise.
+141        """
+142        player = self.connected_players.get(player_id, None)
+143        # the player might have disconnected?
+144        if player is None:
+145            return False
+146
+147        id = UserData(ConfigProvider.get("user_data")).get_user_id(token)
+148
+149        if id is not None:
+150            # add player to authenticated players
+151            self.auth_players[player_id] = (self.connected_players[player_id], id)
+152            # set user_id of player
+153            player.user_id = id
+154            log.debug(f"Player {player_id} authenticated")
+155            return True
+156
+157        return False
+158
+159    def remove(self, player: IPlayer) -> None:
+160        """
+161        Removes a player from the manager.
+162
+163        Args:
+164            player (IPlayer): The player object to be removed.
+165
+166        Returns:
+167            None
+168        """
+169        if player.id in self.connected_players:
+170            del self.connected_players[player.id]
+171
+172            if player.id in self.auth_players:
+173                del self.auth_players[player.id]
+174
+175    def get_user_id(self, player_id: PlayerID) -> int | None:
+176        """
+177        Retrieves the user ID associated with a player.
+178
+179        Args:
+180            player_id (PlayerID): The ID of the player.
+181
+182        Returns:
+183            Optional[int]: The user ID if found, None otherwise.
+184        """
+185        if player_id in self.auth_players:
+186            return self.auth_players[player_id][1]
+187        return None
+188
+189    def get_player_by_id(self, player_id: PlayerID) -> IPlayer | None:
+190        """
+191        Retrieves the player object associated with a player ID.
+192        This only works for authenticated players.
+193
+194        Args:
+195            player_id (PlayerID): The ID of the player.
+196
+197        Returns:
+198            Optional[IPlayer]: The player object if found, None otherwise.
+199        """
+200        if player_id in self.auth_players:
+201            return self.auth_players[player_id][0]
+202        return None
+203
+204    def broadcast_error(self, msg: str) -> None:
+205        """
+206        Broadcasts a message to all connected players.
+207
+208        Args:
+209            msg (str): The message to be broadcasted.
+210
+211        Returns:
+212            None
+213        """
+214
+215        for player in self.connected_players.values():
+216            player.notify_error(msg)
+217
+218    def disconnect_all(self, reason: str) -> None:
+219        """
+220        Disconnects all connected players.
+221
+222        Args:
+223            reason (str): The reason for disconnection.
+224
+225        Returns:
+226            None
+227        """
+228
+229        for player in self.connected_players.values():
+230            player.disconnect(reason)
+231
+232    def get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]:
+233        """
+234        Retrieves the matchmaking parameters of a user based on their ID.
+235
+236        Args:
+237            user_id (int): The ID of the user.
+238
+239        Returns:
+240            tuple[float, float]: The mu and sigma values of the user.
+241        """
+242        return UserData(ConfigProvider.get("user_data")).get_matchmaking_parameters(
+243            user_id
+244        )
+245
+246    def update_matchmaking_parameters(
+247        self, user_id: int, new_mu: float, new_sigma: float
+248    ) -> None:
+249        """
+250        Updates the matchmaking parameters of a user based on their ID.
+251
+252        Args:
+253            user_id (int): The ID of the user.
+254            new_mu (float): The new mu value of the user.
+255            new_sigma (float): The new sigma value of the user.
+256        """
+257        UserData(ConfigProvider.get("user_data")).set_matchmaking_parameters(
+258            user_id, new_mu, new_sigma
+259        )
+
+ + +

Manages connected players.

+
+ + +
+
+ auth_players: dict[uuid.UUID, tuple[comprl.server.interfaces.IPlayer, int]] + + +
+ + + + +
+
+
+ connected_players: dict[uuid.UUID, comprl.server.interfaces.IPlayer] + + +
+ + + + +
+
+ +
+ + def + add(self, player: comprl.server.interfaces.IPlayer) -> None: + + + +
+ +
119    def add(self, player: IPlayer) -> None:
+120        """
+121        Adds a player to the manager.
+122
+123        Args:
+124            player (IPlayer): The player object to be added.
+125
+126        Returns:
+127            None
+128        """
+129        self.connected_players[player.id] = player
+
+ + +

Adds a player to the manager.

+ +

Args: + player (IPlayer): The player object to be added.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + auth(self, player_id: uuid.UUID, token: str) -> bool: + + + +
+ +
131    def auth(self, player_id: PlayerID, token: str) -> bool:
+132        """
+133        Authenticates a player using their player ID and token.
+134
+135        Args:
+136            player_id (PlayerID): The ID of the player.
+137            token (str): The authentication token.
+138
+139        Returns:
+140            bool: True if the authentication is successful, False otherwise.
+141        """
+142        player = self.connected_players.get(player_id, None)
+143        # the player might have disconnected?
+144        if player is None:
+145            return False
+146
+147        id = UserData(ConfigProvider.get("user_data")).get_user_id(token)
+148
+149        if id is not None:
+150            # add player to authenticated players
+151            self.auth_players[player_id] = (self.connected_players[player_id], id)
+152            # set user_id of player
+153            player.user_id = id
+154            log.debug(f"Player {player_id} authenticated")
+155            return True
+156
+157        return False
+
+ + +

Authenticates a player using their player ID and token.

+ +

Args: + player_id (PlayerID): The ID of the player. + token (str): The authentication token.

+ +

Returns: + bool: True if the authentication is successful, False otherwise.

+
+ + +
+
+ +
+ + def + remove(self, player: comprl.server.interfaces.IPlayer) -> None: + + + +
+ +
159    def remove(self, player: IPlayer) -> None:
+160        """
+161        Removes a player from the manager.
+162
+163        Args:
+164            player (IPlayer): The player object to be removed.
+165
+166        Returns:
+167            None
+168        """
+169        if player.id in self.connected_players:
+170            del self.connected_players[player.id]
+171
+172            if player.id in self.auth_players:
+173                del self.auth_players[player.id]
+
+ + +

Removes a player from the manager.

+ +

Args: + player (IPlayer): The player object to be removed.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + get_user_id(self, player_id: uuid.UUID) -> int | None: + + + +
+ +
175    def get_user_id(self, player_id: PlayerID) -> int | None:
+176        """
+177        Retrieves the user ID associated with a player.
+178
+179        Args:
+180            player_id (PlayerID): The ID of the player.
+181
+182        Returns:
+183            Optional[int]: The user ID if found, None otherwise.
+184        """
+185        if player_id in self.auth_players:
+186            return self.auth_players[player_id][1]
+187        return None
+
+ + +

Retrieves the user ID associated with a player.

+ +

Args: + player_id (PlayerID): The ID of the player.

+ +

Returns: + Optional[int]: The user ID if found, None otherwise.

+
+ + +
+
+ +
+ + def + get_player_by_id(self, player_id: uuid.UUID) -> comprl.server.interfaces.IPlayer | None: + + + +
+ +
189    def get_player_by_id(self, player_id: PlayerID) -> IPlayer | None:
+190        """
+191        Retrieves the player object associated with a player ID.
+192        This only works for authenticated players.
+193
+194        Args:
+195            player_id (PlayerID): The ID of the player.
+196
+197        Returns:
+198            Optional[IPlayer]: The player object if found, None otherwise.
+199        """
+200        if player_id in self.auth_players:
+201            return self.auth_players[player_id][0]
+202        return None
+
+ + +

Retrieves the player object associated with a player ID. +This only works for authenticated players.

+ +

Args: + player_id (PlayerID): The ID of the player.

+ +

Returns: + Optional[IPlayer]: The player object if found, None otherwise.

+
+ + +
+
+ +
+ + def + broadcast_error(self, msg: str) -> None: + + + +
+ +
204    def broadcast_error(self, msg: str) -> None:
+205        """
+206        Broadcasts a message to all connected players.
+207
+208        Args:
+209            msg (str): The message to be broadcasted.
+210
+211        Returns:
+212            None
+213        """
+214
+215        for player in self.connected_players.values():
+216            player.notify_error(msg)
+
+ + +

Broadcasts a message to all connected players.

+ +

Args: + msg (str): The message to be broadcasted.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + disconnect_all(self, reason: str) -> None: + + + +
+ +
218    def disconnect_all(self, reason: str) -> None:
+219        """
+220        Disconnects all connected players.
+221
+222        Args:
+223            reason (str): The reason for disconnection.
+224
+225        Returns:
+226            None
+227        """
+228
+229        for player in self.connected_players.values():
+230            player.disconnect(reason)
+
+ + +

Disconnects all connected players.

+ +

Args: + reason (str): The reason for disconnection.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]: + + + +
+ +
232    def get_matchmaking_parameters(self, user_id: int) -> tuple[float, float]:
+233        """
+234        Retrieves the matchmaking parameters of a user based on their ID.
+235
+236        Args:
+237            user_id (int): The ID of the user.
+238
+239        Returns:
+240            tuple[float, float]: The mu and sigma values of the user.
+241        """
+242        return UserData(ConfigProvider.get("user_data")).get_matchmaking_parameters(
+243            user_id
+244        )
+
+ + +

Retrieves the matchmaking parameters of a user based on their ID.

+ +

Args: + user_id (int): The ID of the user.

+ +

Returns: + tuple[float, float]: The mu and sigma values of the user.

+
+ + +
+
+ +
+ + def + update_matchmaking_parameters(self, user_id: int, new_mu: float, new_sigma: float) -> None: + + + +
+ +
246    def update_matchmaking_parameters(
+247        self, user_id: int, new_mu: float, new_sigma: float
+248    ) -> None:
+249        """
+250        Updates the matchmaking parameters of a user based on their ID.
+251
+252        Args:
+253            user_id (int): The ID of the user.
+254            new_mu (float): The new mu value of the user.
+255            new_sigma (float): The new sigma value of the user.
+256        """
+257        UserData(ConfigProvider.get("user_data")).set_matchmaking_parameters(
+258            user_id, new_mu, new_sigma
+259        )
+
+ + +

Updates the matchmaking parameters of a user based on their ID.

+ +

Args: + user_id (int): The ID of the user. + new_mu (float): The new mu value of the user. + new_sigma (float): The new sigma value of the user.

+
+ + +
+
+
+
+ QueuePlayer: TypeAlias = +tuple[uuid.UUID, int, float, float, datetime.datetime] + + +
+ + + + +
+
+ +
+ + class + MatchmakingManager: + + + +
+ +
267class MatchmakingManager:
+268    """handles matchmaking between players and starts the game"""
+269
+270    def __init__(
+271        self, player_manager: PlayerManager, game_manager: GameManager
+272    ) -> None:
+273        """
+274        Initializes a MatchmakingManager object.
+275
+276        Args:
+277            player_manager (PlayerManager): The player manager object.
+278            game_manager (GameManager): The game manager object.
+279        """
+280        self.player_manager = player_manager
+281        self.game_manager = game_manager
+282
+283        # queue storing player id, mu, sigma and time they joined the queue
+284        self._queue: list[QueuePlayer] = []
+285        # The model used for matchmaking
+286        self.model = PlackettLuce()
+287        self._MATCH_QUALITY_THRESHOLD = 0.8
+288        self._PERCENTAGE_MIN_PLAYERS_WAITING = 0.1
+289
+290    def try_match(self, player_id: PlayerID) -> None:
+291        """
+292        Tries to add a player with the given player ID to the matchmaking queue.
+293
+294        Args:
+295            player_id (PlayerID): The ID of the player to match.
+296
+297        Returns:
+298            None
+299        """
+300        player = self.player_manager.get_player_by_id(player_id)
+301        if player is not None:
+302            # FIXME: we might wan't to kick the player
+303
+304            def __match(ready: bool):
+305                if ready:
+306                    player.notify_info(msg="Waiting in queue")
+307                    self.match(player_id)
+308
+309            player.is_ready(result_callback=__match)
+310
+311    def match(self, player_id: PlayerID) -> None:
+312        """
+313        Adds player to the queue.
+314
+315        Args:
+316            player_id (PlayerID): The ID of the player to be matched.
+317        """
+318        user_id = self.player_manager.get_user_id(player_id)
+319        if user_id is None:
+320            log.error(f"Player {player_id} is not authenticated but tried to queue.")
+321            return
+322        mu, sigma = self.player_manager.get_matchmaking_parameters(user_id)
+323
+324        # check if enough players are waiting
+325        self._queue.append((player_id, user_id, mu, sigma, datetime.now()))
+326
+327        log.debug(f"Player {player_id} was added to the queue")
+328
+329        return
+330
+331    def remove(self, player_id: PlayerID) -> None:
+332        """
+333        Removes a player from the matchmaking queue.
+334
+335        Args:
+336            player_id (PlayerID): The ID of the player to be removed.
+337        """
+338        self._queue = [
+339            (p_id, u_id, mu, sigma, time)
+340            for p_id, u_id, mu, sigma, time in self._queue
+341            if (p_id != player_id)
+342        ]
+343
+344    def _update(self, start_index: int = 0) -> None:
+345        """
+346        Updates the matchmaking manager.
+347
+348        start_index (int, optional): The position in queue to start matching from.
+349        Used for recursion. Defaults to 0.
+350        """
+351
+352        if len(self._queue) < self._min_players_waiting():
+353            return
+354
+355        for i in range(start_index, len(self._queue)):
+356            for j in range(i + 1, len(self._queue)):
+357                # try to match all players against each other
+358                if self._try_start_game(self._queue[i], self._queue[j]):
+359                    # players are matched and removed from queue. continue searching
+360                    self._update(i)
+361                    return
+362        return
+363
+364    def _min_players_waiting(self) -> int:
+365        """
+366        Returns the minimum number of players that need to be waiting in the queue.
+367
+368        Returns:
+369            int: The minimum number of players.
+370        """
+371        return int(
+372            len(self.player_manager.auth_players) * self._PERCENTAGE_MIN_PLAYERS_WAITING
+373        )
+374
+375    def _try_start_game(self, player1: QueuePlayer, player2: QueuePlayer) -> bool:
+376        """
+377        Tries to start a game with the given players.
+378
+379        Args:
+380            player1 (QueuePlayer): The first player.
+381            player2 (QueuePlayer): The second player.
+382
+383        Returns:
+384            bool: True if the game was started, False otherwise.
+385        """
+386        player1_id, user1_id, _, _, _ = player1
+387        player2_id, user2_id, _, _, _ = player2
+388        match_quality = self._rate_match_quality(player1, player2)
+389        # prevent the user from playing against himself
+390        if user1_id == user2_id:
+391            return False
+392
+393        if match_quality > self._MATCH_QUALITY_THRESHOLD:
+394            # match the players. We could search for best match but using the first adds
+395            # a bit of diversity and the players in front of the queue are waiting
+396            # longer, so its fairer for them.
+397
+398            players = [
+399                self.player_manager.get_player_by_id(player1_id),
+400                self.player_manager.get_player_by_id(player2_id),
+401            ]
+402
+403            filtered_players = [player for player in players if player is not None]
+404
+405            if len(filtered_players) != 2:
+406                log.error("Player was in queue but not in player manager")
+407                if players[0] is None:
+408                    self.remove(player1_id)
+409                if players[1] is None:
+410                    self.remove(player2_id)
+411                return False
+412
+413            self.remove(player1_id)
+414            self.remove(player2_id)
+415
+416            game = self.game_manager.start_game(filtered_players)
+417            game.add_finish_callback(self._end_game)
+418            return True
+419        return False
+420
+421    def _rate_match_quality(self, player1: QueuePlayer, player2: QueuePlayer) -> float:
+422        """
+423        Rates the match quality between two players.
+424
+425        Args:
+426            player1 (QueuePlayer): The first player.
+427            player2 (QueuePlayer): The second player.
+428
+429        Returns:
+430            float: The match quality.
+431        """
+432        _, _, mu_p1, sigma_p1, time_stamp_p1 = player1
+433        _, _, mu_p2, sigma_p2, time_stamp_p2 = player2
+434        now = datetime.now()
+435        waiting_time_p1 = (now - time_stamp_p1).total_seconds()
+436        waiting_time_p2 = (now - time_stamp_p2).total_seconds()
+437        combined_waiting_time = waiting_time_p1 + waiting_time_p2
+438        # calculate a bonus if the players waited a long time
+439        waiting_bonus = max(0.0, (combined_waiting_time / 60 - 1) * 0.1)
+440        # TODO play with this function. Maybe even use polynomial or exponential growth,
+441        # depending on waiting time
+442
+443        rating_p1 = self.model.create_rating([mu_p1, sigma_p1], "player1")
+444        rating_p2 = self.model.create_rating([mu_p2, sigma_p2], "player2")
+445        draw_prob = self.model.predict_draw([[rating_p1], [rating_p2]])
+446        return draw_prob + waiting_bonus
+447
+448    def _end_game(self, game: IGame) -> None:
+449        """
+450        Readds players to queue after game has ended.
+451
+452        Args:
+453            game (IGame): The game to be ended.
+454        """
+455        # update elo values
+456        result = game.get_result()
+457        if result is not None:
+458            mu_p1, sigma_p1 = self.player_manager.get_matchmaking_parameters(
+459                result.user1_id
+460            )
+461            mu_p2, sigma_p2 = self.player_manager.get_matchmaking_parameters(
+462                result.user2_id
+463            )
+464            rating_p1 = self.model.create_rating([mu_p1, sigma_p1], "player1")
+465            rating_p2 = self.model.create_rating([mu_p2, sigma_p2], "player2")
+466            [[p1], [p2]] = self.model.rate(
+467                [[rating_p1], [rating_p2]],
+468                scores=[result.score_user_1, result.score_user_2],
+469            )
+470            self.player_manager.update_matchmaking_parameters(
+471                result.user1_id, p1.mu, p1.sigma
+472            )
+473            self.player_manager.update_matchmaking_parameters(
+474                result.user2_id, p2.mu, p2.sigma
+475            )
+476
+477        for _, p in game.players.items():
+478            self.try_match(p.id)
+
+ + +

handles matchmaking between players and starts the game

+
+ + +
+ +
+ + MatchmakingManager( player_manager: PlayerManager, game_manager: GameManager) + + + +
+ +
270    def __init__(
+271        self, player_manager: PlayerManager, game_manager: GameManager
+272    ) -> None:
+273        """
+274        Initializes a MatchmakingManager object.
+275
+276        Args:
+277            player_manager (PlayerManager): The player manager object.
+278            game_manager (GameManager): The game manager object.
+279        """
+280        self.player_manager = player_manager
+281        self.game_manager = game_manager
+282
+283        # queue storing player id, mu, sigma and time they joined the queue
+284        self._queue: list[QueuePlayer] = []
+285        # The model used for matchmaking
+286        self.model = PlackettLuce()
+287        self._MATCH_QUALITY_THRESHOLD = 0.8
+288        self._PERCENTAGE_MIN_PLAYERS_WAITING = 0.1
+
+ + +

Initializes a MatchmakingManager object.

+ +

Args: + player_manager (PlayerManager): The player manager object. + game_manager (GameManager): The game manager object.

+
+ + +
+
+
+ player_manager + + +
+ + + + +
+
+
+ game_manager + + +
+ + + + +
+
+
+ model + + +
+ + + + +
+
+ +
+ + def + try_match(self, player_id: uuid.UUID) -> None: + + + +
+ +
290    def try_match(self, player_id: PlayerID) -> None:
+291        """
+292        Tries to add a player with the given player ID to the matchmaking queue.
+293
+294        Args:
+295            player_id (PlayerID): The ID of the player to match.
+296
+297        Returns:
+298            None
+299        """
+300        player = self.player_manager.get_player_by_id(player_id)
+301        if player is not None:
+302            # FIXME: we might wan't to kick the player
+303
+304            def __match(ready: bool):
+305                if ready:
+306                    player.notify_info(msg="Waiting in queue")
+307                    self.match(player_id)
+308
+309            player.is_ready(result_callback=__match)
+
+ + +

Tries to add a player with the given player ID to the matchmaking queue.

+ +

Args: + player_id (PlayerID): The ID of the player to match.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + match(self, player_id: uuid.UUID) -> None: + + + +
+ +
311    def match(self, player_id: PlayerID) -> None:
+312        """
+313        Adds player to the queue.
+314
+315        Args:
+316            player_id (PlayerID): The ID of the player to be matched.
+317        """
+318        user_id = self.player_manager.get_user_id(player_id)
+319        if user_id is None:
+320            log.error(f"Player {player_id} is not authenticated but tried to queue.")
+321            return
+322        mu, sigma = self.player_manager.get_matchmaking_parameters(user_id)
+323
+324        # check if enough players are waiting
+325        self._queue.append((player_id, user_id, mu, sigma, datetime.now()))
+326
+327        log.debug(f"Player {player_id} was added to the queue")
+328
+329        return
+
+ + +

Adds player to the queue.

+ +

Args: + player_id (PlayerID): The ID of the player to be matched.

+
+ + +
+
+ +
+ + def + remove(self, player_id: uuid.UUID) -> None: + + + +
+ +
331    def remove(self, player_id: PlayerID) -> None:
+332        """
+333        Removes a player from the matchmaking queue.
+334
+335        Args:
+336            player_id (PlayerID): The ID of the player to be removed.
+337        """
+338        self._queue = [
+339            (p_id, u_id, mu, sigma, time)
+340            for p_id, u_id, mu, sigma, time in self._queue
+341            if (p_id != player_id)
+342        ]
+
+ + +

Removes a player from the matchmaking queue.

+ +

Args: + player_id (PlayerID): The ID of the player to be removed.

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/networking.html b/documentation/comprl/server/networking.html new file mode 100644 index 0000000..8153e40 --- /dev/null +++ b/documentation/comprl/server/networking.html @@ -0,0 +1,2600 @@ + + + + + + + comprl.server.networking API documentation + + + + + + + + + +
+
+

+comprl.server.networking

+ +

contains the networking components of the server

+
+ + + + + +
  1"""contains the networking components of the server"""
+  2
+  3import logging as log
+  4from typing import Callable, Any
+  5
+  6from twisted.internet.interfaces import IAddress
+  7from twisted.internet.protocol import Protocol, ServerFactory
+  8from twisted.protocols import amp
+  9from twisted.internet import reactor
+ 10from twisted.internet.task import LoopingCall
+ 11
+ 12from comprl.server.interfaces import IPlayer, IServer
+ 13from comprl.server.util import ConfigProvider
+ 14from comprl.shared.commands import Auth, EndGame, Error, Ready, StartGame, Step, Message
+ 15from comprl.shared.types import GameID
+ 16
+ 17VERSION: int = 1
+ 18
+ 19
+ 20class COMPServerProtocol(amp.AMP):
+ 21    """
+ 22    Represents the server-side protocol for the COMP server.
+ 23
+ 24    This class extends the `amp.AMP` class and provides methods for handling
+ 25    various events and interactions with the client.
+ 26
+ 27    Attributes:
+ 28        connection_made_callbacks (list[Callable[[], None]]): List of callbacks
+ 29            to be executed when the connection is made.
+ 30        connection_lost_callbacks (list[Callable[[], None]]): List of callbacks
+ 31            to be executed when the connection is lost.
+ 32    """
+ 33
+ 34    def __init__(self, boxReceiver=None, locator=None):
+ 35        super().__init__(boxReceiver, locator)
+ 36
+ 37        self.connection_made_callbacks: list[Callable[[], None]] = []
+ 38        self.connection_lost_callbacks: list[Callable[[], None]] = []
+ 39        self.connection_timeout_callbacks: list[Callable[[Any, Any], None]] = []
+ 40        self.connection_error_callbacks: list[Callable[[Any], None]] = []
+ 41
+ 42    def add_connection_made_callback(self, callback: Callable[[], None]):
+ 43        """adds callback that is executed, when the connection is made
+ 44
+ 45        Args:
+ 46            callback (function): callback to execute, when the connection is made
+ 47
+ 48        Returns:
+ 49            None
+ 50        """
+ 51        self.connection_made_callbacks.append(callback)
+ 52
+ 53    def add_connection_lost_callback(self, callback: Callable[[], None]):
+ 54        """
+ 55        Adds a callback function to be executed when the connection is lost.
+ 56
+ 57        Args:
+ 58            callback: The callback function to be added.
+ 59
+ 60        Returns:
+ 61            None
+ 62        """
+ 63        self.connection_lost_callbacks.append(callback)
+ 64
+ 65    def add_connection_timeout_callback(self, callback: Callable[[Any, Any], None]):
+ 66        """
+ 67        Adds a callback function to be executed when there is a timeout.
+ 68
+ 69        Args:
+ 70            callback: The callback function to be added.
+ 71
+ 72        Returns:
+ 73            None
+ 74        """
+ 75        self.connection_timeout_callbacks.append(callback)
+ 76
+ 77    def add_connection_error_callback(self, callback: Callable[[Any], None]):
+ 78        """
+ 79        Adds a callback function to be executed when there occurs an error in deferred.
+ 80
+ 81        Args:
+ 82            callback: The callback function to be added.
+ 83
+ 84        Returns:
+ 85            None
+ 86        """
+ 87        self.connection_error_callbacks.append(callback)
+ 88
+ 89    def connectionMade(self) -> None:
+ 90        """
+ 91        Called when the connection to the client is established.
+ 92
+ 93        Returns:
+ 94            None
+ 95        """
+ 96        # broadcast to callbacks
+ 97        for c in self.connection_made_callbacks:
+ 98            c()
+ 99
+100        return super().connectionMade()
+101
+102    def connectionLost(self, reason):
+103        """
+104        Called when the connection to the client is lost.
+105
+106        Args:
+107            reason: The reason for the connection loss.
+108
+109        Returns:
+110            None
+111        """
+112        # log.debug("connection to client lost")
+113        for c in self.connection_lost_callbacks:
+114            c()
+115
+116        super().connectionLost(reason)
+117
+118    def connectionTimeout(self, failure, timeout) -> None:
+119        """
+120        Handles the timeout event for a connection.
+121
+122        Args:
+123            failure: The failure object representing the timeout.
+124            timeout: The timeout value in seconds.
+125        Returns:
+126            None
+127        """
+128        # log.debug("connection timeout")
+129        for c in self.connection_timeout_callbacks:
+130            c(failure, timeout)
+131
+132    def connection_error(self, error) -> None:
+133        """Is called when an error in Deferred occurs
+134
+135        Args:
+136            place : where the error was caused
+137            error : description of the error
+138        """
+139        for c in self.connection_error_callbacks:
+140            c(error)
+141
+142    def get_token(self, return_callback: Callable[[str], None]) -> None:
+143        """
+144        Retrieves a token from the client and calls the return_callback
+145        function with the token.
+146
+147        Args:
+148            return_callback (Callable[[str], None]): A callback function that takes
+149            a string parameter.
+150
+151        Returns:
+152            None
+153        """
+154
+155        def callback(res):
+156            if res["version"] == VERSION:
+157                return_callback(res["token"].decode())
+158            else:
+159                log.error("Client with wrong version tried to authenticate.")
+160                self.send_error(msg="Tried to connect with wrong version")
+161                self.disconnect()
+162
+163        return (
+164            self.callRemote(Auth)
+165            .addCallback(callback=callback)
+166            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+167            .addErrback(self.connection_error)
+168        )
+169
+170    def is_ready(self, return_callback: Callable[[bool], None]) -> bool:
+171        """
+172        Checks if the client is ready.
+173
+174        Args:
+175            return_callback (Callable[[bool], None]): A callback function that will
+176            be called with the result of the check.
+177
+178        Returns:
+179            bool: Containing the information if the client is ready.
+180        """
+181        return (
+182            self.callRemote(Ready)
+183            .addCallback(callback=lambda res: return_callback(res["ready"]))
+184            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+185            .addErrback(self.connection_error)
+186        )
+187
+188    def notify_start(self, game_id: GameID) -> None:
+189        """
+190        Notifies the client that a game has started.
+191
+192        Args:
+193            game_id (GameID): The ID of the game that has started.
+194        """
+195        return self.callRemote(StartGame, game_id=game_id.bytes)
+196
+197    def get_step(
+198        self, obv: list[float], return_callback: Callable[[list], None]
+199    ) -> None:
+200        """
+201        Sends an observation to the remote client and retrieves the corresponding
+202        action.
+203
+204        Args:
+205            obv (list[float]): The observation to send to the client.
+206            return_callback (Callable[[list], None]): The callback function to be
+207                called with the retrieved action.
+208
+209        Returns:
+210            None
+211        """
+212        return (
+213            self.callRemote(Step, obv=obv)
+214            .addCallback(callback=lambda res: return_callback(res["action"]))
+215            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+216            .addErrback(self.connection_error)
+217        )
+218
+219    def notify_end(self, result, stats) -> None:
+220        """
+221        Notifies the remote client about the end of the game.
+222
+223        Args:
+224            result: The result of the game.
+225            stats: The statistics of the game.
+226
+227        Returns:
+228            None
+229        """
+230        return (
+231            self.callRemote(EndGame, result=result, stats=stats)
+232            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+233            .addErrback(self.connection_error)
+234        )
+235
+236    def send_error(self, msg: str):
+237        """
+238        Send an error string to the client.
+239
+240        Args:
+241            msg (str): The error message to send.
+242
+243        Returns:
+244            None
+245        """
+246        return self.callRemote(Error, msg=str.encode(msg)).addErrback(
+247            self.connection_error
+248        )
+249
+250    def send_message(self, msg: str):
+251        """
+252        Send a message string to the client.
+253
+254        Args:
+255            msg (str): The message to send.
+256
+257        Returns:
+258            None
+259        """
+260        return self.callRemote(Message, msg=str.encode(msg)).addErrback(
+261            self.connection_error
+262        )
+263
+264    def disconnect(self):
+265        """
+266        Disconnects the client from the server.
+267
+268        Returns:
+269            None
+270        """
+271        self.transport.loseConnection()
+272
+273
+274class COMPPlayer(IPlayer):
+275    """Represents a player in the COMP game.
+276
+277    Attributes:
+278        connection (COMPServerProtocol): The networking connection for the player.
+279    """
+280
+281    def __init__(self, connection: COMPServerProtocol) -> None:
+282        """Initialize the COMPPlayer instance.
+283
+284        Args:
+285            connection (COMPServerProtocol): The networking connection for the player.
+286        """
+287        super().__init__()
+288        self.connection: COMPServerProtocol = connection
+289        self.is_connected: bool = False
+290
+291        def set_connection(c: bool):
+292            self.is_connected = c
+293
+294        self.connection.add_connection_made_callback(
+295            callback=lambda: set_connection(True)
+296        )
+297        self.connection.add_connection_lost_callback(
+298            callback=lambda: set_connection(False)
+299        )
+300
+301    def authenticate(self, result_callback):
+302        """Authenticates the player.
+303
+304        Args:
+305            result_callback (callback function):
+306                The callback to handle the authentication result.
+307
+308        Returns:
+309            token (string): The authentication token.
+310        """
+311        if self.is_connected:
+312            self.connection.get_token(result_callback)
+313
+314    def is_ready(self, result_callback) -> bool:
+315        """Checks if the player is ready to play.
+316
+317        Args:
+318            result_callback (callback function): The callback to handle the result.
+319
+320        Returns:
+321            bool: True if the player is ready to play, False otherwise.
+322        """
+323        return self.connection.is_ready(result_callback)
+324
+325    def notify_start(self, game_id: GameID):
+326        """Notifies the player about the start of the game.
+327
+328        Args:
+329            game_id (GameID): The ID of the game.
+330        """
+331        if self.is_connected:
+332            self.connection.notify_start(game_id=game_id)
+333
+334    def get_action(self, obv, result_callback):
+335        """Receives the action from the server.
+336
+337        Args:
+338            obv (any): The observation.
+339            result_callback (callback function): The callback to handle the result.
+340        """
+341        if self.is_connected:
+342            self.connection.get_step(obv, result_callback)
+343
+344    def notify_end(self, result, stats):
+345        """Called when the game ends.
+346
+347        Args:
+348            result (any): The result of the game.
+349            stats (any): The stats of the game.
+350        """
+351        if self.is_connected:
+352            self.connection.notify_end(result=result, stats=stats)
+353
+354    def disconnect(self, reason: str):
+355        """Disconnects the player.
+356
+357        Args:
+358            reason (str): The reason for the disconnection.
+359        """
+360        self.connection.send_error(reason)
+361        self.connection.disconnect()
+362
+363    def notify_error(self, error: str):
+364        """Notifies the player of an error.
+365
+366        Args:
+367            error (str): The error message.
+368        """
+369        if self.is_connected:
+370            self.connection.send_error(error)
+371
+372    def notify_info(self, msg: str):
+373        """Notifies the player of an information.
+374
+375        Args:
+376            msg (str): The information message.
+377        """
+378        self.connection.send_message(msg)
+379
+380
+381class COMPFactory(ServerFactory):
+382    """Factory for COMP servers.
+383
+384    This class represents a factory for creating COMP servers.
+385    It is responsible for starting and stopping the server, as well as building
+386    the protocol for incoming connections.
+387
+388    Attributes:
+389        server (IServer): The server instance associated with this factory.
+390    """
+391
+392    def __init__(self, server: IServer) -> None:
+393        self.server: IServer = server
+394
+395    def startFactory(self) -> None:
+396        """Start the server factory."""
+397        self.server.on_start()
+398        super().startFactory()
+399
+400    def stopFactory(self) -> None:
+401        """Stop the server factory."""
+402        self.server.on_stop()
+403        super().stopFactory()
+404
+405    def buildProtocol(self, addr: IAddress) -> Protocol | None:
+406        """Build the protocol for incoming connections.
+407
+408        Args:
+409            addr (IAddress): The address of the incoming connection.
+410
+411        Returns:
+412            Protocol | None: The protocol for the incoming connection.
+413
+414        """
+415        protocol: COMPServerProtocol = COMPServerProtocol()
+416        comp_player: COMPPlayer = COMPPlayer(protocol)
+417
+418        # set up the callbacks needed for the server
+419        protocol.add_connection_made_callback(
+420            lambda: self.server.on_connect(comp_player)
+421        )
+422        protocol.add_connection_lost_callback(
+423            lambda: self.server.on_disconnect(comp_player)
+424        )
+425        protocol.add_connection_timeout_callback(
+426            lambda failure, timeout: self.server.on_timeout(
+427                comp_player, failure, timeout
+428            )
+429        )
+430        protocol.add_connection_error_callback(
+431            lambda error: self.server.on_remote_error(comp_player, error)
+432        )
+433
+434        return protocol
+435
+436
+437def launch_server(server: IServer, port: int = 65335) -> None:
+438    """Create a COMP server.
+439
+440    Args:
+441        server (IServer): The server instance to be used.
+442        port (int): The port number of the server. Defaults to 65335.
+443
+444    """
+445    log.info(f"Launching server on port {port}")
+446
+447    reactor.listenTCP(port, COMPFactory(server))  # type: ignore[attr-defined]
+448
+449    # setup and link the on_update event
+450    LoopingCall(server.on_update).start(1.0)
+451    reactor.run()  # type: ignore[attr-defined]
+
+ + +
+
+
+ VERSION: int = +1 + + +
+ + + + +
+
+ +
+ + class + COMPServerProtocol(twisted.protocols.amp.AMP): + + + +
+ +
 21class COMPServerProtocol(amp.AMP):
+ 22    """
+ 23    Represents the server-side protocol for the COMP server.
+ 24
+ 25    This class extends the `amp.AMP` class and provides methods for handling
+ 26    various events and interactions with the client.
+ 27
+ 28    Attributes:
+ 29        connection_made_callbacks (list[Callable[[], None]]): List of callbacks
+ 30            to be executed when the connection is made.
+ 31        connection_lost_callbacks (list[Callable[[], None]]): List of callbacks
+ 32            to be executed when the connection is lost.
+ 33    """
+ 34
+ 35    def __init__(self, boxReceiver=None, locator=None):
+ 36        super().__init__(boxReceiver, locator)
+ 37
+ 38        self.connection_made_callbacks: list[Callable[[], None]] = []
+ 39        self.connection_lost_callbacks: list[Callable[[], None]] = []
+ 40        self.connection_timeout_callbacks: list[Callable[[Any, Any], None]] = []
+ 41        self.connection_error_callbacks: list[Callable[[Any], None]] = []
+ 42
+ 43    def add_connection_made_callback(self, callback: Callable[[], None]):
+ 44        """adds callback that is executed, when the connection is made
+ 45
+ 46        Args:
+ 47            callback (function): callback to execute, when the connection is made
+ 48
+ 49        Returns:
+ 50            None
+ 51        """
+ 52        self.connection_made_callbacks.append(callback)
+ 53
+ 54    def add_connection_lost_callback(self, callback: Callable[[], None]):
+ 55        """
+ 56        Adds a callback function to be executed when the connection is lost.
+ 57
+ 58        Args:
+ 59            callback: The callback function to be added.
+ 60
+ 61        Returns:
+ 62            None
+ 63        """
+ 64        self.connection_lost_callbacks.append(callback)
+ 65
+ 66    def add_connection_timeout_callback(self, callback: Callable[[Any, Any], None]):
+ 67        """
+ 68        Adds a callback function to be executed when there is a timeout.
+ 69
+ 70        Args:
+ 71            callback: The callback function to be added.
+ 72
+ 73        Returns:
+ 74            None
+ 75        """
+ 76        self.connection_timeout_callbacks.append(callback)
+ 77
+ 78    def add_connection_error_callback(self, callback: Callable[[Any], None]):
+ 79        """
+ 80        Adds a callback function to be executed when there occurs an error in deferred.
+ 81
+ 82        Args:
+ 83            callback: The callback function to be added.
+ 84
+ 85        Returns:
+ 86            None
+ 87        """
+ 88        self.connection_error_callbacks.append(callback)
+ 89
+ 90    def connectionMade(self) -> None:
+ 91        """
+ 92        Called when the connection to the client is established.
+ 93
+ 94        Returns:
+ 95            None
+ 96        """
+ 97        # broadcast to callbacks
+ 98        for c in self.connection_made_callbacks:
+ 99            c()
+100
+101        return super().connectionMade()
+102
+103    def connectionLost(self, reason):
+104        """
+105        Called when the connection to the client is lost.
+106
+107        Args:
+108            reason: The reason for the connection loss.
+109
+110        Returns:
+111            None
+112        """
+113        # log.debug("connection to client lost")
+114        for c in self.connection_lost_callbacks:
+115            c()
+116
+117        super().connectionLost(reason)
+118
+119    def connectionTimeout(self, failure, timeout) -> None:
+120        """
+121        Handles the timeout event for a connection.
+122
+123        Args:
+124            failure: The failure object representing the timeout.
+125            timeout: The timeout value in seconds.
+126        Returns:
+127            None
+128        """
+129        # log.debug("connection timeout")
+130        for c in self.connection_timeout_callbacks:
+131            c(failure, timeout)
+132
+133    def connection_error(self, error) -> None:
+134        """Is called when an error in Deferred occurs
+135
+136        Args:
+137            place : where the error was caused
+138            error : description of the error
+139        """
+140        for c in self.connection_error_callbacks:
+141            c(error)
+142
+143    def get_token(self, return_callback: Callable[[str], None]) -> None:
+144        """
+145        Retrieves a token from the client and calls the return_callback
+146        function with the token.
+147
+148        Args:
+149            return_callback (Callable[[str], None]): A callback function that takes
+150            a string parameter.
+151
+152        Returns:
+153            None
+154        """
+155
+156        def callback(res):
+157            if res["version"] == VERSION:
+158                return_callback(res["token"].decode())
+159            else:
+160                log.error("Client with wrong version tried to authenticate.")
+161                self.send_error(msg="Tried to connect with wrong version")
+162                self.disconnect()
+163
+164        return (
+165            self.callRemote(Auth)
+166            .addCallback(callback=callback)
+167            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+168            .addErrback(self.connection_error)
+169        )
+170
+171    def is_ready(self, return_callback: Callable[[bool], None]) -> bool:
+172        """
+173        Checks if the client is ready.
+174
+175        Args:
+176            return_callback (Callable[[bool], None]): A callback function that will
+177            be called with the result of the check.
+178
+179        Returns:
+180            bool: Containing the information if the client is ready.
+181        """
+182        return (
+183            self.callRemote(Ready)
+184            .addCallback(callback=lambda res: return_callback(res["ready"]))
+185            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+186            .addErrback(self.connection_error)
+187        )
+188
+189    def notify_start(self, game_id: GameID) -> None:
+190        """
+191        Notifies the client that a game has started.
+192
+193        Args:
+194            game_id (GameID): The ID of the game that has started.
+195        """
+196        return self.callRemote(StartGame, game_id=game_id.bytes)
+197
+198    def get_step(
+199        self, obv: list[float], return_callback: Callable[[list], None]
+200    ) -> None:
+201        """
+202        Sends an observation to the remote client and retrieves the corresponding
+203        action.
+204
+205        Args:
+206            obv (list[float]): The observation to send to the client.
+207            return_callback (Callable[[list], None]): The callback function to be
+208                called with the retrieved action.
+209
+210        Returns:
+211            None
+212        """
+213        return (
+214            self.callRemote(Step, obv=obv)
+215            .addCallback(callback=lambda res: return_callback(res["action"]))
+216            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+217            .addErrback(self.connection_error)
+218        )
+219
+220    def notify_end(self, result, stats) -> None:
+221        """
+222        Notifies the remote client about the end of the game.
+223
+224        Args:
+225            result: The result of the game.
+226            stats: The statistics of the game.
+227
+228        Returns:
+229            None
+230        """
+231        return (
+232            self.callRemote(EndGame, result=result, stats=stats)
+233            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+234            .addErrback(self.connection_error)
+235        )
+236
+237    def send_error(self, msg: str):
+238        """
+239        Send an error string to the client.
+240
+241        Args:
+242            msg (str): The error message to send.
+243
+244        Returns:
+245            None
+246        """
+247        return self.callRemote(Error, msg=str.encode(msg)).addErrback(
+248            self.connection_error
+249        )
+250
+251    def send_message(self, msg: str):
+252        """
+253        Send a message string to the client.
+254
+255        Args:
+256            msg (str): The message to send.
+257
+258        Returns:
+259            None
+260        """
+261        return self.callRemote(Message, msg=str.encode(msg)).addErrback(
+262            self.connection_error
+263        )
+264
+265    def disconnect(self):
+266        """
+267        Disconnects the client from the server.
+268
+269        Returns:
+270            None
+271        """
+272        self.transport.loseConnection()
+
+ + +

Represents the server-side protocol for the COMP server.

+ +

This class extends the amp.AMP class and provides methods for handling +various events and interactions with the client.

+ +

Attributes: + connection_made_callbacks (list[Callable[[], None]]): List of callbacks + to be executed when the connection is made. + connection_lost_callbacks (list[Callable[[], None]]): List of callbacks + to be executed when the connection is lost.

+
+ + +
+ +
+ + COMPServerProtocol(boxReceiver=None, locator=None) + + + +
+ +
35    def __init__(self, boxReceiver=None, locator=None):
+36        super().__init__(boxReceiver, locator)
+37
+38        self.connection_made_callbacks: list[Callable[[], None]] = []
+39        self.connection_lost_callbacks: list[Callable[[], None]] = []
+40        self.connection_timeout_callbacks: list[Callable[[Any, Any], None]] = []
+41        self.connection_error_callbacks: list[Callable[[Any], None]] = []
+
+ + + + +
+
+
+ connection_made_callbacks: list[typing.Callable[[], NoneType]] + + +
+ + + + +
+
+
+ connection_lost_callbacks: list[typing.Callable[[], NoneType]] + + +
+ + + + +
+
+
+ connection_timeout_callbacks: list[typing.Callable[[typing.Any, typing.Any], NoneType]] + + +
+ + + + +
+
+
+ connection_error_callbacks: list[typing.Callable[[typing.Any], NoneType]] + + +
+ + + + +
+
+ +
+ + def + add_connection_made_callback(self, callback: Callable[[], NoneType]): + + + +
+ +
43    def add_connection_made_callback(self, callback: Callable[[], None]):
+44        """adds callback that is executed, when the connection is made
+45
+46        Args:
+47            callback (function): callback to execute, when the connection is made
+48
+49        Returns:
+50            None
+51        """
+52        self.connection_made_callbacks.append(callback)
+
+ + +

adds callback that is executed, when the connection is made

+ +

Args: + callback (function): callback to execute, when the connection is made

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + add_connection_lost_callback(self, callback: Callable[[], NoneType]): + + + +
+ +
54    def add_connection_lost_callback(self, callback: Callable[[], None]):
+55        """
+56        Adds a callback function to be executed when the connection is lost.
+57
+58        Args:
+59            callback: The callback function to be added.
+60
+61        Returns:
+62            None
+63        """
+64        self.connection_lost_callbacks.append(callback)
+
+ + +

Adds a callback function to be executed when the connection is lost.

+ +

Args: + callback: The callback function to be added.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + add_connection_timeout_callback(self, callback: Callable[[Any, Any], NoneType]): + + + +
+ +
66    def add_connection_timeout_callback(self, callback: Callable[[Any, Any], None]):
+67        """
+68        Adds a callback function to be executed when there is a timeout.
+69
+70        Args:
+71            callback: The callback function to be added.
+72
+73        Returns:
+74            None
+75        """
+76        self.connection_timeout_callbacks.append(callback)
+
+ + +

Adds a callback function to be executed when there is a timeout.

+ +

Args: + callback: The callback function to be added.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + add_connection_error_callback(self, callback: Callable[[Any], NoneType]): + + + +
+ +
78    def add_connection_error_callback(self, callback: Callable[[Any], None]):
+79        """
+80        Adds a callback function to be executed when there occurs an error in deferred.
+81
+82        Args:
+83            callback: The callback function to be added.
+84
+85        Returns:
+86            None
+87        """
+88        self.connection_error_callbacks.append(callback)
+
+ + +

Adds a callback function to be executed when there occurs an error in deferred.

+ +

Args: + callback: The callback function to be added.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + connectionMade(self) -> None: + + + +
+ +
 90    def connectionMade(self) -> None:
+ 91        """
+ 92        Called when the connection to the client is established.
+ 93
+ 94        Returns:
+ 95            None
+ 96        """
+ 97        # broadcast to callbacks
+ 98        for c in self.connection_made_callbacks:
+ 99            c()
+100
+101        return super().connectionMade()
+
+ + +

Called when the connection to the client is established.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + connectionLost(self, reason): + + + +
+ +
103    def connectionLost(self, reason):
+104        """
+105        Called when the connection to the client is lost.
+106
+107        Args:
+108            reason: The reason for the connection loss.
+109
+110        Returns:
+111            None
+112        """
+113        # log.debug("connection to client lost")
+114        for c in self.connection_lost_callbacks:
+115            c()
+116
+117        super().connectionLost(reason)
+
+ + +

Called when the connection to the client is lost.

+ +

Args: + reason: The reason for the connection loss.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + connectionTimeout(self, failure, timeout) -> None: + + + +
+ +
119    def connectionTimeout(self, failure, timeout) -> None:
+120        """
+121        Handles the timeout event for a connection.
+122
+123        Args:
+124            failure: The failure object representing the timeout.
+125            timeout: The timeout value in seconds.
+126        Returns:
+127            None
+128        """
+129        # log.debug("connection timeout")
+130        for c in self.connection_timeout_callbacks:
+131            c(failure, timeout)
+
+ + +

Handles the timeout event for a connection.

+ +

Args: + failure: The failure object representing the timeout. + timeout: The timeout value in seconds. +Returns: + None

+
+ + +
+
+ +
+ + def + connection_error(self, error) -> None: + + + +
+ +
133    def connection_error(self, error) -> None:
+134        """Is called when an error in Deferred occurs
+135
+136        Args:
+137            place : where the error was caused
+138            error : description of the error
+139        """
+140        for c in self.connection_error_callbacks:
+141            c(error)
+
+ + +

Is called when an error in Deferred occurs

+ +

Args: + place : where the error was caused + error : description of the error

+
+ + +
+
+ +
+ + def + get_token(self, return_callback: Callable[[str], NoneType]) -> None: + + + +
+ +
143    def get_token(self, return_callback: Callable[[str], None]) -> None:
+144        """
+145        Retrieves a token from the client and calls the return_callback
+146        function with the token.
+147
+148        Args:
+149            return_callback (Callable[[str], None]): A callback function that takes
+150            a string parameter.
+151
+152        Returns:
+153            None
+154        """
+155
+156        def callback(res):
+157            if res["version"] == VERSION:
+158                return_callback(res["token"].decode())
+159            else:
+160                log.error("Client with wrong version tried to authenticate.")
+161                self.send_error(msg="Tried to connect with wrong version")
+162                self.disconnect()
+163
+164        return (
+165            self.callRemote(Auth)
+166            .addCallback(callback=callback)
+167            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+168            .addErrback(self.connection_error)
+169        )
+
+ + +

Retrieves a token from the client and calls the return_callback +function with the token.

+ +

Args: + return_callback (Callable[[str], None]): A callback function that takes + a string parameter.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + is_ready(self, return_callback: Callable[[bool], NoneType]) -> bool: + + + +
+ +
171    def is_ready(self, return_callback: Callable[[bool], None]) -> bool:
+172        """
+173        Checks if the client is ready.
+174
+175        Args:
+176            return_callback (Callable[[bool], None]): A callback function that will
+177            be called with the result of the check.
+178
+179        Returns:
+180            bool: Containing the information if the client is ready.
+181        """
+182        return (
+183            self.callRemote(Ready)
+184            .addCallback(callback=lambda res: return_callback(res["ready"]))
+185            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+186            .addErrback(self.connection_error)
+187        )
+
+ + +

Checks if the client is ready.

+ +

Args: + return_callback (Callable[[bool], None]): A callback function that will + be called with the result of the check.

+ +

Returns: + bool: Containing the information if the client is ready.

+
+ + +
+
+ +
+ + def + notify_start(self, game_id: uuid.UUID) -> None: + + + +
+ +
189    def notify_start(self, game_id: GameID) -> None:
+190        """
+191        Notifies the client that a game has started.
+192
+193        Args:
+194            game_id (GameID): The ID of the game that has started.
+195        """
+196        return self.callRemote(StartGame, game_id=game_id.bytes)
+
+ + +

Notifies the client that a game has started.

+ +

Args: + game_id (GameID): The ID of the game that has started.

+
+ + +
+
+ +
+ + def + get_step( self, obv: list[float], return_callback: Callable[[list], NoneType]) -> None: + + + +
+ +
198    def get_step(
+199        self, obv: list[float], return_callback: Callable[[list], None]
+200    ) -> None:
+201        """
+202        Sends an observation to the remote client and retrieves the corresponding
+203        action.
+204
+205        Args:
+206            obv (list[float]): The observation to send to the client.
+207            return_callback (Callable[[list], None]): The callback function to be
+208                called with the retrieved action.
+209
+210        Returns:
+211            None
+212        """
+213        return (
+214            self.callRemote(Step, obv=obv)
+215            .addCallback(callback=lambda res: return_callback(res["action"]))
+216            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+217            .addErrback(self.connection_error)
+218        )
+
+ + +

Sends an observation to the remote client and retrieves the corresponding +action.

+ +

Args: + obv (list[float]): The observation to send to the client. + return_callback (Callable[[list], None]): The callback function to be + called with the retrieved action.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + notify_end(self, result, stats) -> None: + + + +
+ +
220    def notify_end(self, result, stats) -> None:
+221        """
+222        Notifies the remote client about the end of the game.
+223
+224        Args:
+225            result: The result of the game.
+226            stats: The statistics of the game.
+227
+228        Returns:
+229            None
+230        """
+231        return (
+232            self.callRemote(EndGame, result=result, stats=stats)
+233            .addTimeout(ConfigProvider.get("timeout"), reactor, self.connectionTimeout)
+234            .addErrback(self.connection_error)
+235        )
+
+ + +

Notifies the remote client about the end of the game.

+ +

Args: + result: The result of the game. + stats: The statistics of the game.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + send_error(self, msg: str): + + + +
+ +
237    def send_error(self, msg: str):
+238        """
+239        Send an error string to the client.
+240
+241        Args:
+242            msg (str): The error message to send.
+243
+244        Returns:
+245            None
+246        """
+247        return self.callRemote(Error, msg=str.encode(msg)).addErrback(
+248            self.connection_error
+249        )
+
+ + +

Send an error string to the client.

+ +

Args: + msg (str): The error message to send.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + send_message(self, msg: str): + + + +
+ +
251    def send_message(self, msg: str):
+252        """
+253        Send a message string to the client.
+254
+255        Args:
+256            msg (str): The message to send.
+257
+258        Returns:
+259            None
+260        """
+261        return self.callRemote(Message, msg=str.encode(msg)).addErrback(
+262            self.connection_error
+263        )
+
+ + +

Send a message string to the client.

+ +

Args: + msg (str): The message to send.

+ +

Returns: + None

+
+ + +
+
+ +
+ + def + disconnect(self): + + + +
+ +
265    def disconnect(self):
+266        """
+267        Disconnects the client from the server.
+268
+269        Returns:
+270            None
+271        """
+272        self.transport.loseConnection()
+
+ + +

Disconnects the client from the server.

+ +

Returns: + None

+
+ + +
+
+
Inherited Members
+
+
twisted.protocols.amp.AMP
+
locateResponder
+
makeConnection
+ +
+
twisted.protocols.amp.BinaryBoxProtocol
+
hostCertificate
+
noPeerCertificate
+
innerProtocol
+
innerProtocolClientFactory
+
boxReceiver
+
sendBox
+
dataReceived
+
MAX_LENGTH
+
proto_init
+
proto_key
+
proto_value
+
lengthLimitExceeded
+
peerCertificate
+
unhandledError
+ +
+
twisted.protocols.basic.StatefulStringProtocol
+
state
+
stringReceived
+ +
+
twisted.protocols.basic.Int16StringReceiver
+
structFormat
+
prefixLength
+ +
+
twisted.protocols.basic.IntNStringReceiver
+
recvd
+
sendString
+ +
+
twisted.internet.protocol.Protocol
+
factory
+
logPrefix
+ +
+
twisted.internet.protocol.BaseProtocol
+
connected
+
transport
+ +
+
twisted.protocols.basic._PauseableMixin
+
paused
+
pauseProducing
+
resumeProducing
+
stopProducing
+ +
+
twisted.protocols.amp._DescriptorExchanger
+
fileDescriptorReceived
+ +
+
twisted.protocols.amp.BoxDispatcher
+
boxSender
+
locator
+
startReceivingBoxes
+
stopReceivingBoxes
+
failAllOutgoing
+
callRemoteString
+
callRemote
+
ampBoxReceived
+
dispatchCommand
+ +
+
twisted.protocols.amp.CommandLocator
+
lookupFunction
+ +
+
twisted.protocols.amp.SimpleStringLocator
+
baseDispatchPrefix
+ +
+
+
+
+
+ +
+ + class + COMPPlayer(comprl.server.interfaces.IPlayer): + + + +
+ +
275class COMPPlayer(IPlayer):
+276    """Represents a player in the COMP game.
+277
+278    Attributes:
+279        connection (COMPServerProtocol): The networking connection for the player.
+280    """
+281
+282    def __init__(self, connection: COMPServerProtocol) -> None:
+283        """Initialize the COMPPlayer instance.
+284
+285        Args:
+286            connection (COMPServerProtocol): The networking connection for the player.
+287        """
+288        super().__init__()
+289        self.connection: COMPServerProtocol = connection
+290        self.is_connected: bool = False
+291
+292        def set_connection(c: bool):
+293            self.is_connected = c
+294
+295        self.connection.add_connection_made_callback(
+296            callback=lambda: set_connection(True)
+297        )
+298        self.connection.add_connection_lost_callback(
+299            callback=lambda: set_connection(False)
+300        )
+301
+302    def authenticate(self, result_callback):
+303        """Authenticates the player.
+304
+305        Args:
+306            result_callback (callback function):
+307                The callback to handle the authentication result.
+308
+309        Returns:
+310            token (string): The authentication token.
+311        """
+312        if self.is_connected:
+313            self.connection.get_token(result_callback)
+314
+315    def is_ready(self, result_callback) -> bool:
+316        """Checks if the player is ready to play.
+317
+318        Args:
+319            result_callback (callback function): The callback to handle the result.
+320
+321        Returns:
+322            bool: True if the player is ready to play, False otherwise.
+323        """
+324        return self.connection.is_ready(result_callback)
+325
+326    def notify_start(self, game_id: GameID):
+327        """Notifies the player about the start of the game.
+328
+329        Args:
+330            game_id (GameID): The ID of the game.
+331        """
+332        if self.is_connected:
+333            self.connection.notify_start(game_id=game_id)
+334
+335    def get_action(self, obv, result_callback):
+336        """Receives the action from the server.
+337
+338        Args:
+339            obv (any): The observation.
+340            result_callback (callback function): The callback to handle the result.
+341        """
+342        if self.is_connected:
+343            self.connection.get_step(obv, result_callback)
+344
+345    def notify_end(self, result, stats):
+346        """Called when the game ends.
+347
+348        Args:
+349            result (any): The result of the game.
+350            stats (any): The stats of the game.
+351        """
+352        if self.is_connected:
+353            self.connection.notify_end(result=result, stats=stats)
+354
+355    def disconnect(self, reason: str):
+356        """Disconnects the player.
+357
+358        Args:
+359            reason (str): The reason for the disconnection.
+360        """
+361        self.connection.send_error(reason)
+362        self.connection.disconnect()
+363
+364    def notify_error(self, error: str):
+365        """Notifies the player of an error.
+366
+367        Args:
+368            error (str): The error message.
+369        """
+370        if self.is_connected:
+371            self.connection.send_error(error)
+372
+373    def notify_info(self, msg: str):
+374        """Notifies the player of an information.
+375
+376        Args:
+377            msg (str): The information message.
+378        """
+379        self.connection.send_message(msg)
+
+ + +

Represents a player in the COMP game.

+ +

Attributes: + connection (COMPServerProtocol): The networking connection for the player.

+
+ + +
+ +
+ + COMPPlayer(connection: COMPServerProtocol) + + + +
+ +
282    def __init__(self, connection: COMPServerProtocol) -> None:
+283        """Initialize the COMPPlayer instance.
+284
+285        Args:
+286            connection (COMPServerProtocol): The networking connection for the player.
+287        """
+288        super().__init__()
+289        self.connection: COMPServerProtocol = connection
+290        self.is_connected: bool = False
+291
+292        def set_connection(c: bool):
+293            self.is_connected = c
+294
+295        self.connection.add_connection_made_callback(
+296            callback=lambda: set_connection(True)
+297        )
+298        self.connection.add_connection_lost_callback(
+299            callback=lambda: set_connection(False)
+300        )
+
+ + +

Initialize the COMPPlayer instance.

+ +

Args: + connection (COMPServerProtocol): The networking connection for the player.

+
+ + +
+
+
+ connection: COMPServerProtocol + + +
+ + + + +
+
+
+ is_connected: bool + + +
+ + + + +
+
+ +
+ + def + authenticate(self, result_callback): + + + +
+ +
302    def authenticate(self, result_callback):
+303        """Authenticates the player.
+304
+305        Args:
+306            result_callback (callback function):
+307                The callback to handle the authentication result.
+308
+309        Returns:
+310            token (string): The authentication token.
+311        """
+312        if self.is_connected:
+313            self.connection.get_token(result_callback)
+
+ + +

Authenticates the player.

+ +

Args: + result_callback (callback function): + The callback to handle the authentication result.

+ +

Returns: + token (string): The authentication token.

+
+ + +
+
+ +
+ + def + is_ready(self, result_callback) -> bool: + + + +
+ +
315    def is_ready(self, result_callback) -> bool:
+316        """Checks if the player is ready to play.
+317
+318        Args:
+319            result_callback (callback function): The callback to handle the result.
+320
+321        Returns:
+322            bool: True if the player is ready to play, False otherwise.
+323        """
+324        return self.connection.is_ready(result_callback)
+
+ + +

Checks if the player is ready to play.

+ +

Args: + result_callback (callback function): The callback to handle the result.

+ +

Returns: + bool: True if the player is ready to play, False otherwise.

+
+ + +
+
+ +
+ + def + notify_start(self, game_id: uuid.UUID): + + + +
+ +
326    def notify_start(self, game_id: GameID):
+327        """Notifies the player about the start of the game.
+328
+329        Args:
+330            game_id (GameID): The ID of the game.
+331        """
+332        if self.is_connected:
+333            self.connection.notify_start(game_id=game_id)
+
+ + +

Notifies the player about the start of the game.

+ +

Args: + game_id (GameID): The ID of the game.

+
+ + +
+
+ +
+ + def + get_action(self, obv, result_callback): + + + +
+ +
335    def get_action(self, obv, result_callback):
+336        """Receives the action from the server.
+337
+338        Args:
+339            obv (any): The observation.
+340            result_callback (callback function): The callback to handle the result.
+341        """
+342        if self.is_connected:
+343            self.connection.get_step(obv, result_callback)
+
+ + +

Receives the action from the server.

+ +

Args: + obv (any): The observation. + result_callback (callback function): The callback to handle the result.

+
+ + +
+
+ +
+ + def + notify_end(self, result, stats): + + + +
+ +
345    def notify_end(self, result, stats):
+346        """Called when the game ends.
+347
+348        Args:
+349            result (any): The result of the game.
+350            stats (any): The stats of the game.
+351        """
+352        if self.is_connected:
+353            self.connection.notify_end(result=result, stats=stats)
+
+ + +

Called when the game ends.

+ +

Args: + result (any): The result of the game. + stats (any): The stats of the game.

+
+ + +
+
+ +
+ + def + disconnect(self, reason: str): + + + +
+ +
355    def disconnect(self, reason: str):
+356        """Disconnects the player.
+357
+358        Args:
+359            reason (str): The reason for the disconnection.
+360        """
+361        self.connection.send_error(reason)
+362        self.connection.disconnect()
+
+ + +

Disconnects the player.

+ +

Args: + reason (str): The reason for the disconnection.

+
+ + +
+
+ +
+ + def + notify_error(self, error: str): + + + +
+ +
364    def notify_error(self, error: str):
+365        """Notifies the player of an error.
+366
+367        Args:
+368            error (str): The error message.
+369        """
+370        if self.is_connected:
+371            self.connection.send_error(error)
+
+ + +

Notifies the player of an error.

+ +

Args: + error (str): The error message.

+
+ + +
+
+ +
+ + def + notify_info(self, msg: str): + + + +
+ +
373    def notify_info(self, msg: str):
+374        """Notifies the player of an information.
+375
+376        Args:
+377            msg (str): The information message.
+378        """
+379        self.connection.send_message(msg)
+
+ + +

Notifies the player of an information.

+ +

Args: + msg (str): The information message.

+
+ + +
+
+
Inherited Members
+
+
comprl.server.interfaces.IPlayer
+
id
+
user_id
+ +
+
+
+
+
+ +
+ + class + COMPFactory(twisted.internet.protocol.ServerFactory): + + + +
+ +
382class COMPFactory(ServerFactory):
+383    """Factory for COMP servers.
+384
+385    This class represents a factory for creating COMP servers.
+386    It is responsible for starting and stopping the server, as well as building
+387    the protocol for incoming connections.
+388
+389    Attributes:
+390        server (IServer): The server instance associated with this factory.
+391    """
+392
+393    def __init__(self, server: IServer) -> None:
+394        self.server: IServer = server
+395
+396    def startFactory(self) -> None:
+397        """Start the server factory."""
+398        self.server.on_start()
+399        super().startFactory()
+400
+401    def stopFactory(self) -> None:
+402        """Stop the server factory."""
+403        self.server.on_stop()
+404        super().stopFactory()
+405
+406    def buildProtocol(self, addr: IAddress) -> Protocol | None:
+407        """Build the protocol for incoming connections.
+408
+409        Args:
+410            addr (IAddress): The address of the incoming connection.
+411
+412        Returns:
+413            Protocol | None: The protocol for the incoming connection.
+414
+415        """
+416        protocol: COMPServerProtocol = COMPServerProtocol()
+417        comp_player: COMPPlayer = COMPPlayer(protocol)
+418
+419        # set up the callbacks needed for the server
+420        protocol.add_connection_made_callback(
+421            lambda: self.server.on_connect(comp_player)
+422        )
+423        protocol.add_connection_lost_callback(
+424            lambda: self.server.on_disconnect(comp_player)
+425        )
+426        protocol.add_connection_timeout_callback(
+427            lambda failure, timeout: self.server.on_timeout(
+428                comp_player, failure, timeout
+429            )
+430        )
+431        protocol.add_connection_error_callback(
+432            lambda error: self.server.on_remote_error(comp_player, error)
+433        )
+434
+435        return protocol
+
+ + +

Factory for COMP servers.

+ +

This class represents a factory for creating COMP servers. +It is responsible for starting and stopping the server, as well as building +the protocol for incoming connections.

+ +

Attributes: + server (IServer): The server instance associated with this factory.

+
+ + +
+ +
+ + COMPFactory(server: comprl.server.interfaces.IServer) + + + +
+ +
393    def __init__(self, server: IServer) -> None:
+394        self.server: IServer = server
+
+ + + + +
+
+ + + + + +
+
+ +
+ + def + startFactory(self) -> None: + + + +
+ +
396    def startFactory(self) -> None:
+397        """Start the server factory."""
+398        self.server.on_start()
+399        super().startFactory()
+
+ + +

Start the server factory.

+
+ + +
+
+ +
+ + def + stopFactory(self) -> None: + + + +
+ +
401    def stopFactory(self) -> None:
+402        """Stop the server factory."""
+403        self.server.on_stop()
+404        super().stopFactory()
+
+ + +

Stop the server factory.

+
+ + +
+
+ +
+ + def + buildProtocol( self, addr: <InterfaceClass twisted.internet.interfaces.IAddress>) -> twisted.internet.protocol.Protocol | None: + + + +
+ +
406    def buildProtocol(self, addr: IAddress) -> Protocol | None:
+407        """Build the protocol for incoming connections.
+408
+409        Args:
+410            addr (IAddress): The address of the incoming connection.
+411
+412        Returns:
+413            Protocol | None: The protocol for the incoming connection.
+414
+415        """
+416        protocol: COMPServerProtocol = COMPServerProtocol()
+417        comp_player: COMPPlayer = COMPPlayer(protocol)
+418
+419        # set up the callbacks needed for the server
+420        protocol.add_connection_made_callback(
+421            lambda: self.server.on_connect(comp_player)
+422        )
+423        protocol.add_connection_lost_callback(
+424            lambda: self.server.on_disconnect(comp_player)
+425        )
+426        protocol.add_connection_timeout_callback(
+427            lambda failure, timeout: self.server.on_timeout(
+428                comp_player, failure, timeout
+429            )
+430        )
+431        protocol.add_connection_error_callback(
+432            lambda error: self.server.on_remote_error(comp_player, error)
+433        )
+434
+435        return protocol
+
+ + +

Build the protocol for incoming connections.

+ +

Args: + addr (IAddress): The address of the incoming connection.

+ +

Returns: + Protocol | None: The protocol for the incoming connection.

+
+ + +
+
+
Inherited Members
+
+
twisted.internet.protocol.Factory
+
protocol
+
numPorts
+
noisy
+
forProtocol
+
logPrefix
+
doStart
+
doStop
+ +
+
+
+
+
+ +
+ + def + launch_server(server: comprl.server.interfaces.IServer, port: int = 65335) -> None: + + + +
+ +
438def launch_server(server: IServer, port: int = 65335) -> None:
+439    """Create a COMP server.
+440
+441    Args:
+442        server (IServer): The server instance to be used.
+443        port (int): The port number of the server. Defaults to 65335.
+444
+445    """
+446    log.info(f"Launching server on port {port}")
+447
+448    reactor.listenTCP(port, COMPFactory(server))  # type: ignore[attr-defined]
+449
+450    # setup and link the on_update event
+451    LoopingCall(server.on_update).start(1.0)
+452    reactor.run()  # type: ignore[attr-defined]
+
+ + +

Create a COMP server.

+ +

Args: + server (IServer): The server instance to be used. + port (int): The port number of the server. Defaults to 65335.

+
+ + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/server/util.html b/documentation/comprl/server/util.html new file mode 100644 index 0000000..8f2fd97 --- /dev/null +++ b/documentation/comprl/server/util.html @@ -0,0 +1,555 @@ + + + + + + + comprl.server.util API documentation + + + + + + + + + +
+
+

+comprl.server.util

+ +

This module contains utility functions for the server.

+
+ + + + + +
 1"""
+ 2This module contains utility functions for the server.
+ 3"""
+ 4
+ 5import uuid
+ 6
+ 7from comprl.shared.types import GameID, PlayerID
+ 8from comprl.server.data import ConnectionInfo
+ 9
+10
+11class IDGenerator:
+12    """handles the creation of id's"""
+13
+14    @staticmethod
+15    def generate_player_id() -> PlayerID:
+16        """generates a unique id for players
+17
+18        Returns:
+19            PlayerID: obtained id
+20        """
+21        return uuid.uuid4()
+22
+23    @staticmethod
+24    def generate_game_id() -> GameID:
+25        """generates a unique id for games
+26
+27        Returns:
+28            GameID: obtained id
+29        """
+30        return uuid.uuid4()
+31
+32
+33class ConfigProvider:
+34    """provides configuration settings"""
+35
+36    __config = {
+37        "port": 8080,
+38        "timeout": 10,
+39        "log_level": "INFO",
+40        "game_type": None,
+41        "game_data": ConnectionInfo("data.db", "games"),
+42        "user_data": ConnectionInfo("data.db", "users"),
+43    }
+44
+45    @staticmethod
+46    def get(key):
+47        """gets a configuration setting
+48
+49        Args:
+50            key (str): key of the setting
+51
+52        Returns:
+53            Any: value of the setting
+54        """
+55        return ConfigProvider.__config[key]
+56
+57    @staticmethod
+58    def set(key, value):
+59        """sets a configuration setting
+60
+61        Args:
+62            key (str): key of the setting
+63            value (Any): value of the setting
+64        """
+65        ConfigProvider.__config[key] = value
+
+ + +
+
+ +
+ + class + IDGenerator: + + + +
+ +
12class IDGenerator:
+13    """handles the creation of id's"""
+14
+15    @staticmethod
+16    def generate_player_id() -> PlayerID:
+17        """generates a unique id for players
+18
+19        Returns:
+20            PlayerID: obtained id
+21        """
+22        return uuid.uuid4()
+23
+24    @staticmethod
+25    def generate_game_id() -> GameID:
+26        """generates a unique id for games
+27
+28        Returns:
+29            GameID: obtained id
+30        """
+31        return uuid.uuid4()
+
+ + +

handles the creation of id's

+
+ + +
+ +
+
@staticmethod
+ + def + generate_player_id() -> uuid.UUID: + + + +
+ +
15    @staticmethod
+16    def generate_player_id() -> PlayerID:
+17        """generates a unique id for players
+18
+19        Returns:
+20            PlayerID: obtained id
+21        """
+22        return uuid.uuid4()
+
+ + +

generates a unique id for players

+ +

Returns: + PlayerID: obtained id

+
+ + +
+
+ +
+
@staticmethod
+ + def + generate_game_id() -> uuid.UUID: + + + +
+ +
24    @staticmethod
+25    def generate_game_id() -> GameID:
+26        """generates a unique id for games
+27
+28        Returns:
+29            GameID: obtained id
+30        """
+31        return uuid.uuid4()
+
+ + +

generates a unique id for games

+ +

Returns: + GameID: obtained id

+
+ + +
+
+
+ +
+ + class + ConfigProvider: + + + +
+ +
34class ConfigProvider:
+35    """provides configuration settings"""
+36
+37    __config = {
+38        "port": 8080,
+39        "timeout": 10,
+40        "log_level": "INFO",
+41        "game_type": None,
+42        "game_data": ConnectionInfo("data.db", "games"),
+43        "user_data": ConnectionInfo("data.db", "users"),
+44    }
+45
+46    @staticmethod
+47    def get(key):
+48        """gets a configuration setting
+49
+50        Args:
+51            key (str): key of the setting
+52
+53        Returns:
+54            Any: value of the setting
+55        """
+56        return ConfigProvider.__config[key]
+57
+58    @staticmethod
+59    def set(key, value):
+60        """sets a configuration setting
+61
+62        Args:
+63            key (str): key of the setting
+64            value (Any): value of the setting
+65        """
+66        ConfigProvider.__config[key] = value
+
+ + +

provides configuration settings

+
+ + +
+ +
+
@staticmethod
+ + def + get(key): + + + +
+ +
46    @staticmethod
+47    def get(key):
+48        """gets a configuration setting
+49
+50        Args:
+51            key (str): key of the setting
+52
+53        Returns:
+54            Any: value of the setting
+55        """
+56        return ConfigProvider.__config[key]
+
+ + +

gets a configuration setting

+ +

Args: + key (str): key of the setting

+ +

Returns: + Any: value of the setting

+
+ + +
+
+ +
+
@staticmethod
+ + def + set(key, value): + + + +
+ +
58    @staticmethod
+59    def set(key, value):
+60        """sets a configuration setting
+61
+62        Args:
+63            key (str): key of the setting
+64            value (Any): value of the setting
+65        """
+66        ConfigProvider.__config[key] = value
+
+ + +

sets a configuration setting

+ +

Args: + key (str): key of the setting + value (Any): value of the setting

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/shared.html b/documentation/comprl/shared.html new file mode 100644 index 0000000..31f31a6 --- /dev/null +++ b/documentation/comprl/shared.html @@ -0,0 +1,238 @@ + + + + + + + comprl.shared API documentation + + + + + + + + + +
+
+

+comprl.shared

+ + + + + +
+
+ + \ No newline at end of file diff --git a/documentation/comprl/shared/commands.html b/documentation/comprl/shared/commands.html new file mode 100644 index 0000000..f2f9636 --- /dev/null +++ b/documentation/comprl/shared/commands.html @@ -0,0 +1,1210 @@ + + + + + + + comprl.shared.commands API documentation + + + + + + + + + +
+
+

+comprl.shared.commands

+ +

Defines the commands used for the server client communication.

+
+ + + + + +
 1"""
+ 2Defines the commands used for the server client communication.
+ 3"""
+ 4
+ 5from twisted.protocols.amp import Integer, String, Boolean, Command, Float, ListOf
+ 6
+ 7
+ 8class Auth(Command):
+ 9    """Command for authenticating the client with the server.
+10
+11    Arguments:
+12        token (String): Token of the client
+13        version (Integer): Version number of the running client framework
+14
+15    Response:
+16        uuid (Integer): UUID assigned by the server to the client
+17    """
+18
+19    arguments = []
+20    response = [(b"token", String()), (b"version", Integer())]
+21
+22
+23class Ready(Command):
+24    """Command to check if the client is ready to start the game"""
+25
+26    arguments = []
+27    response = [(b"ready", Boolean())]
+28
+29
+30class StartGame(Command):
+31    """Command to notify the client that the game starts"""
+32
+33    arguments = [(b"game_id", String())]
+34    response = []
+35
+36
+37class EndGame(Command):
+38    """Command to notify the client that the game has ended"""
+39
+40    arguments = [
+41        (b"result", Boolean()),
+42        (b"stats", ListOf(Float())),
+43    ]
+44    response = []
+45
+46
+47class Step(Command):
+48    """Command for requesting the next step from the agent"""
+49
+50    arguments = [(b"obv", ListOf(Float()))]
+51    response = [(b"action", ListOf(Float()))]
+52
+53
+54class Error(Command):
+55    """Command interface for a generic error message"""
+56
+57    arguments = [(b"msg", String())]
+58    response = []
+59
+60
+61class Message(Command):
+62    """Command interface for a generic message"""
+63
+64    arguments = [(b"msg", String())]
+65    response = []
+
+ + +
+
+ +
+ + class + Auth(twisted.protocols.amp.Command): + + + +
+ +
 9class Auth(Command):
+10    """Command for authenticating the client with the server.
+11
+12    Arguments:
+13        token (String): Token of the client
+14        version (Integer): Version number of the running client framework
+15
+16    Response:
+17        uuid (Integer): UUID assigned by the server to the client
+18    """
+19
+20    arguments = []
+21    response = [(b"token", String()), (b"version", Integer())]
+
+ + +

Command for authenticating the client with the server.

+ +

Arguments: + token (String): Token of the client + version (Integer): Version number of the running client framework

+ +

Response: + uuid (Integer): UUID assigned by the server to the client

+
+ + +
+
+ arguments = +[] + + +
+ + + + +
+
+
+ response = + + [(b'token', <twisted.protocols.amp.String object>), (b'version', <twisted.protocols.amp.Integer object>)] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'Auth' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ +
+ + class + Ready(twisted.protocols.amp.Command): + + + +
+ +
24class Ready(Command):
+25    """Command to check if the client is ready to start the game"""
+26
+27    arguments = []
+28    response = [(b"ready", Boolean())]
+
+ + +

Command to check if the client is ready to start the game

+
+ + +
+
+ arguments = +[] + + +
+ + + + +
+
+
+ response = +[(b'ready', <twisted.protocols.amp.Boolean object>)] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'Ready' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ +
+ + class + StartGame(twisted.protocols.amp.Command): + + + +
+ +
31class StartGame(Command):
+32    """Command to notify the client that the game starts"""
+33
+34    arguments = [(b"game_id", String())]
+35    response = []
+
+ + +

Command to notify the client that the game starts

+
+ + +
+
+ arguments = +[(b'game_id', <twisted.protocols.amp.String object>)] + + +
+ + + + +
+
+
+ response = +[] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'StartGame' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ +
+ + class + EndGame(twisted.protocols.amp.Command): + + + +
+ +
38class EndGame(Command):
+39    """Command to notify the client that the game has ended"""
+40
+41    arguments = [
+42        (b"result", Boolean()),
+43        (b"stats", ListOf(Float())),
+44    ]
+45    response = []
+
+ + +

Command to notify the client that the game has ended

+
+ + +
+
+ arguments = + + [(b'result', <twisted.protocols.amp.Boolean object>), (b'stats', <twisted.protocols.amp.ListOf object>)] + + +
+ + + + +
+
+
+ response = +[] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'EndGame' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ +
+ + class + Step(twisted.protocols.amp.Command): + + + +
+ +
48class Step(Command):
+49    """Command for requesting the next step from the agent"""
+50
+51    arguments = [(b"obv", ListOf(Float()))]
+52    response = [(b"action", ListOf(Float()))]
+
+ + +

Command for requesting the next step from the agent

+
+ + +
+
+ arguments = +[(b'obv', <twisted.protocols.amp.ListOf object>)] + + +
+ + + + +
+
+
+ response = +[(b'action', <twisted.protocols.amp.ListOf object>)] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'Step' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ +
+ + class + Error(twisted.protocols.amp.Command): + + + +
+ +
55class Error(Command):
+56    """Command interface for a generic error message"""
+57
+58    arguments = [(b"msg", String())]
+59    response = []
+
+ + +

Command interface for a generic error message

+
+ + +
+
+ arguments = +[(b'msg', <twisted.protocols.amp.String object>)] + + +
+ + + + +
+
+
+ response = +[] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'Error' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ +
+ + class + Message(twisted.protocols.amp.Command): + + + +
+ +
62class Message(Command):
+63    """Command interface for a generic message"""
+64
+65    arguments = [(b"msg", String())]
+66    response = []
+
+ + +

Command interface for a generic message

+
+ + +
+
+ arguments = +[(b'msg', <twisted.protocols.amp.String object>)] + + +
+ + + + +
+
+
+ response = +[] + + +
+ + + + +
+
+
+ reverseErrors = +{} + + +
+ + + + +
+
+
+ allErrors = +{} + + +
+ + + + +
+
+
+ commandName = +b'Message' + + +
+ + + + +
+
+
Inherited Members
+
+
twisted.protocols.amp.Command
+
Command
+
extra
+
errors
+
fatalErrors
+
commandType
+
responseType
+
requiresAnswer
+
structured
+
makeResponse
+
makeArguments
+
parseResponse
+
parseArguments
+
responder
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/documentation/comprl/shared/types.html b/documentation/comprl/shared/types.html new file mode 100644 index 0000000..41db474 --- /dev/null +++ b/documentation/comprl/shared/types.html @@ -0,0 +1,283 @@ + + + + + + + comprl.shared.types API documentation + + + + + + + + + +
+
+

+comprl.shared.types

+ +

contains types used by the server and the client

+
+ + + + + +
 1"""contains types used by the server and the client"""
+ 2
+ 3from typing import TypeAlias
+ 4import uuid
+ 5
+ 6# NOTE: conda doesn't support python 3.12 (21.01.24)
+ 7#       that's why we cannot use the type keyword
+ 8
+ 9PlayerID: TypeAlias = uuid.UUID
+10GameID: TypeAlias = uuid.UUID
+
+ + +
+
+
+ PlayerID: TypeAlias = +uuid.UUID + + +
+ + + + +
+
+
+ GameID: TypeAlias = +uuid.UUID + + +
+ + + + +
+
+ + \ No newline at end of file diff --git a/documentation/index.html b/documentation/index.html new file mode 100644 index 0000000..a996aa6 --- /dev/null +++ b/documentation/index.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/documentation/search.js b/documentation/search.js new file mode 100644 index 0000000..87ffad5 --- /dev/null +++ b/documentation/search.js @@ -0,0 +1,46 @@ +window.pdocSearch = (function(){ +/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o

\n"}, "comprl.client": {"fullname": "comprl.client", "modulename": "comprl.client", "kind": "module", "doc": "

This module initializes the client package for the competition server.

\n"}, "comprl.client.agent": {"fullname": "comprl.client.agent", "modulename": "comprl.client.agent", "kind": "module", "doc": "

This module contains the Agent class, used by the end-user connecting to the server.

\n"}, "comprl.client.agent.Agent": {"fullname": "comprl.client.agent.Agent", "modulename": "comprl.client.agent", "qualname": "Agent", "kind": "class", "doc": "

Agent used by the end-user connecting to the server.

\n\n

This class represents an agent that interacts with the server. It provides methods\nfor registering event handlers and connecting to the server.

\n", "bases": "comprl.client.interfaces.IAgent"}, "comprl.client.agent.Agent.event": {"fullname": "comprl.client.agent.Agent.event", "modulename": "comprl.client.agent", "qualname": "Agent.event", "kind": "function", "doc": "

Decorator to register a function as an event handler.

\n\n

Args:\n func (function): The function to be registered as an event handler.

\n\n

Returns:\n function: The registered event handler function.

\n", "signature": "(self, func):", "funcdef": "def"}, "comprl.client.agent.Agent.run": {"fullname": "comprl.client.agent.Agent.run", "modulename": "comprl.client.agent", "qualname": "Agent.run", "kind": "function", "doc": "

Connects the client to the server.

\n\n

This method connects the client to the server using the specified token, host,\nand port. It internally calls the run method of the base class to establish\nthe connection.

\n\n

Args:\n token (str): The token used for authentication.\n host (str): The host address of the server. Defaults to \"localhost\".\n port (int): The port number of the server. Defaults to 65335.

\n\n

Returns:\n None

\n", "signature": "(self, token: str, host: str = 'localhost', port: int = 65335) -> None:", "funcdef": "def"}, "comprl.client.agent.Agent.on_error": {"fullname": "comprl.client.agent.Agent.on_error", "modulename": "comprl.client.agent", "qualname": "Agent.on_error", "kind": "function", "doc": "

Called if an error occurred on the server side.

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.client.agent.Agent.on_message": {"fullname": "comprl.client.agent.Agent.on_message", "modulename": "comprl.client.agent", "qualname": "Agent.on_message", "kind": "function", "doc": "

Called if a message is sent from the server.

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.client.agent.Agent.on_disconnect": {"fullname": "comprl.client.agent.Agent.on_disconnect", "modulename": "comprl.client.agent", "qualname": "Agent.on_disconnect", "kind": "function", "doc": "

Called when the agent disconnects from the server.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.client.interfaces": {"fullname": "comprl.client.interfaces", "modulename": "comprl.client.interfaces", "kind": "module", "doc": "

This module contains the interface for the agent.

\n"}, "comprl.client.interfaces.IAgent": {"fullname": "comprl.client.interfaces.IAgent", "modulename": "comprl.client.interfaces", "qualname": "IAgent", "kind": "class", "doc": "

agent interface which could be used by the end-user

\n"}, "comprl.client.interfaces.IAgent.run": {"fullname": "comprl.client.interfaces.IAgent.run", "modulename": "comprl.client.interfaces", "qualname": "IAgent.run", "kind": "function", "doc": "

Runs the agent with the specified token.

\n\n

Args:\n token (str): The token used for authentication.

\n", "signature": "(self, token: str):", "funcdef": "def"}, "comprl.client.interfaces.IAgent.auth": {"fullname": "comprl.client.interfaces.IAgent.auth", "modulename": "comprl.client.interfaces", "qualname": "IAgent.auth", "kind": "function", "doc": "

Returns the authentication token.

\n\n

Returns:\n str: The authentication token.

\n", "signature": "(self) -> str:", "funcdef": "def"}, "comprl.client.interfaces.IAgent.is_ready": {"fullname": "comprl.client.interfaces.IAgent.is_ready", "modulename": "comprl.client.interfaces", "qualname": "IAgent.is_ready", "kind": "function", "doc": "

Returns if the agent is ready to play.

\n\n

Returns:\n bool: True if the agent is ready to play, False otherwise.

\n", "signature": "(self) -> bool:", "funcdef": "def"}, "comprl.client.interfaces.IAgent.on_start_game": {"fullname": "comprl.client.interfaces.IAgent.on_start_game", "modulename": "comprl.client.interfaces", "qualname": "IAgent.on_start_game", "kind": "function", "doc": "

Called when a new game starts.

\n\n

Args:\n game_id (int): The ID of the new game.

\n\n

Returns:\n bool: True if the agent is ready to play, False otherwise.

\n", "signature": "(self, game_id: int) -> None:", "funcdef": "def"}, "comprl.client.interfaces.IAgent.get_step": {"fullname": "comprl.client.interfaces.IAgent.get_step", "modulename": "comprl.client.interfaces", "qualname": "IAgent.get_step", "kind": "function", "doc": "

Requests the agent's action based on the current observation.

\n\n

Args:\n obv (list[float]): The current observation.

\n\n

Returns:\n list[float]: The agent's action.

\n", "signature": "(self, obv: list[float]) -> list[float]:", "funcdef": "def"}, "comprl.client.interfaces.IAgent.on_end_game": {"fullname": "comprl.client.interfaces.IAgent.on_end_game", "modulename": "comprl.client.interfaces", "qualname": "IAgent.on_end_game", "kind": "function", "doc": "

Called when a game ends.

\n\n

Args:\n result: The result of the game.\n stats: The statistics of the game.

\n\n

Returns:\n bool: True if the agent handled the end of the game, False otherwise.

\n", "signature": "(self, result: bool, stats: list[float]) -> None:", "funcdef": "def"}, "comprl.client.interfaces.IAgent.on_error": {"fullname": "comprl.client.interfaces.IAgent.on_error", "modulename": "comprl.client.interfaces", "qualname": "IAgent.on_error", "kind": "function", "doc": "

Called when an error occurs.

\n\n

Args:\n msg (str): The error message.

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.client.interfaces.IAgent.on_message": {"fullname": "comprl.client.interfaces.IAgent.on_message", "modulename": "comprl.client.interfaces", "qualname": "IAgent.on_message", "kind": "function", "doc": "

Called when a message is sent from the server.

\n\n

Args:\n msg (str): The message

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.client.interfaces.IAgent.on_disconnect": {"fullname": "comprl.client.interfaces.IAgent.on_disconnect", "modulename": "comprl.client.interfaces", "qualname": "IAgent.on_disconnect", "kind": "function", "doc": "

Called when the agent disconnects from the server.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.client.networking": {"fullname": "comprl.client.networking", "modulename": "comprl.client.networking", "kind": "module", "doc": "

Contains all networking related classes and functions for the client.

\n"}, "comprl.client.networking.VERSION": {"fullname": "comprl.client.networking.VERSION", "modulename": "comprl.client.networking", "qualname": "VERSION", "kind": "variable", "doc": "

\n", "default_value": "1"}, "comprl.client.networking.ClientProtocol": {"fullname": "comprl.client.networking.ClientProtocol", "modulename": "comprl.client.networking", "qualname": "ClientProtocol", "kind": "class", "doc": "

Protocol for the client.

\n\n

Represents the protocol used by the client to communicate with the server.

\n", "bases": "twisted.protocols.amp.AMP"}, "comprl.client.networking.ClientProtocol.__init__": {"fullname": "comprl.client.networking.ClientProtocol.__init__", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.__init__", "kind": "function", "doc": "

Initialize the COMPClientProtocol.

\n\n

Args:\n agent (COMPAgent): The agent associated with the protocol.\n boxReceiver (object, optional): The box receiver object. Defaults to None.\n locator (object, optional): The locator object. Defaults to None.

\n", "signature": "(\tagent: comprl.client.interfaces.IAgent,\tboxReceiver=None,\tlocator=None)"}, "comprl.client.networking.ClientProtocol.agent": {"fullname": "comprl.client.networking.ClientProtocol.agent", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.agent", "kind": "variable", "doc": "

\n", "annotation": ": comprl.client.interfaces.IAgent"}, "comprl.client.networking.ClientProtocol.connectionMade": {"fullname": "comprl.client.networking.ClientProtocol.connectionMade", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.connectionMade", "kind": "function", "doc": "

Called when the connection to the server is made.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.connectionLost": {"fullname": "comprl.client.networking.ClientProtocol.connectionLost", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.connectionLost", "kind": "function", "doc": "

Called when the connection to the server is lost.

\n\n

Args:\n reason (object): The reason for the lost connection.

\n", "signature": "(self, reason):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.auth": {"fullname": "comprl.client.networking.ClientProtocol.auth", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.auth", "kind": "function", "doc": "

Called for authenticating the client.

\n\n

Returns:\n dict: The client's authentication token and version.\n Example: {\"token\": b'...', \"version\": 1}

\n", "signature": "(self):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.ready": {"fullname": "comprl.client.networking.ClientProtocol.ready", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.ready", "kind": "function", "doc": "

Called when the server wants to know if the client is ready.

\n\n

Returns:\n dict: A dictionary indicating if the client is ready.\n Example: {\"ready\": True}

\n", "signature": "(self):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.start_game": {"fullname": "comprl.client.networking.ClientProtocol.start_game", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.start_game", "kind": "function", "doc": "

Called when the server starts the game.

\n\n

Args:\n game_id (str): The ID of the game.

\n\n

Returns:\n dict: A dictionary indicating if the client is ready to start the game.\n Example: {\"ready\": True}

\n", "signature": "(self, game_id: int):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.end_game": {"fullname": "comprl.client.networking.ClientProtocol.end_game", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.end_game", "kind": "function", "doc": "

Called when the server ends the game.

\n\n

Args:\n result (bool): A boolean indicating if the game was won.\n stats (object): Other statistics.

\n\n

Returns:\n dict: A dictionary indicating if the client is ready to start a new game.\n Example: {\"ready\": True}

\n", "signature": "(self, result, stats):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.step": {"fullname": "comprl.client.networking.ClientProtocol.step", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.step", "kind": "function", "doc": "

Called when the server wants the client to make a step.

\n\n

Args:\n obv (list[float])): The environment given by the server.

\n\n

Returns:\n dict: A dictionary containing the action that should be executed.\n Example: {\"action\": 1}

\n", "signature": "(self, obv: list[float]):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.on_error": {"fullname": "comprl.client.networking.ClientProtocol.on_error", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.on_error", "kind": "function", "doc": "

Called if an error occurred on the server side.

\n\n

Args:\n msg (object): The error description.

\n", "signature": "(self, msg):", "funcdef": "def"}, "comprl.client.networking.ClientProtocol.on_message": {"fullname": "comprl.client.networking.ClientProtocol.on_message", "modulename": "comprl.client.networking", "qualname": "ClientProtocol.on_message", "kind": "function", "doc": "

Called if a message from the server is sent.

\n\n

Args:\n msg (object): The message.

\n", "signature": "(self, msg):", "funcdef": "def"}, "comprl.client.networking.connect_agent": {"fullname": "comprl.client.networking.connect_agent", "modulename": "comprl.client.networking", "qualname": "connect_agent", "kind": "function", "doc": "

Connects the client to the server.

\n\n

This method connects the client to the server using the specified token, host,\nand port. It internally calls the run method of the base class to establish\nthe connection.

\n\n

Args:\n token (str): The token used for authentication.\n host (str): The host address of the server. Defaults to \"localhost\".\n port (int): The port number of the server. Defaults to 65335.

\n\n

Returns:\n None

\n", "signature": "(\tagent: comprl.client.interfaces.IAgent,\thost: str = 'localhost',\tport: int = 65335):", "funcdef": "def"}, "comprl.server": {"fullname": "comprl.server", "modulename": "comprl.server", "kind": "module", "doc": "

\n"}, "comprl.server.data": {"fullname": "comprl.server.data", "modulename": "comprl.server.data", "kind": "module", "doc": "

\n"}, "comprl.server.data.interfaces": {"fullname": "comprl.server.data.interfaces", "modulename": "comprl.server.data.interfaces", "kind": "module", "doc": "

This module contains the interfaces for the game data.

\n"}, "comprl.server.data.interfaces.GameEndState": {"fullname": "comprl.server.data.interfaces.GameEndState", "modulename": "comprl.server.data.interfaces", "qualname": "GameEndState", "kind": "class", "doc": "

Represents the possible end states of a game.

\n\n

Attributes:\n WIN: The game ended with a win.\n DRAW: The game ended in a draw.\n DISCONNECTED: The game ended due to a disconnection.

\n", "bases": "enum.IntEnum"}, "comprl.server.data.interfaces.GameEndState.WIN": {"fullname": "comprl.server.data.interfaces.GameEndState.WIN", "modulename": "comprl.server.data.interfaces", "qualname": "GameEndState.WIN", "kind": "variable", "doc": "

\n", "default_value": "<GameEndState.WIN: 0>"}, "comprl.server.data.interfaces.GameEndState.DRAW": {"fullname": "comprl.server.data.interfaces.GameEndState.DRAW", "modulename": "comprl.server.data.interfaces", "qualname": "GameEndState.DRAW", "kind": "variable", "doc": "

\n", "default_value": "<GameEndState.DRAW: 1>"}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"fullname": "comprl.server.data.interfaces.GameEndState.DISCONNECTED", "modulename": "comprl.server.data.interfaces", "qualname": "GameEndState.DISCONNECTED", "kind": "variable", "doc": "

\n", "default_value": "<GameEndState.DISCONNECTED: 2>"}, "comprl.server.data.interfaces.GameResult": {"fullname": "comprl.server.data.interfaces.GameResult", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult", "kind": "class", "doc": "

Result and statistics of a game

\n"}, "comprl.server.data.interfaces.GameResult.__init__": {"fullname": "comprl.server.data.interfaces.GameResult.__init__", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.__init__", "kind": "function", "doc": "

initialize a game result

\n\n

Args:\n game_id (UUID): id of the game\n user1_id (int): id of the first user\n user2_id (int): id of the second user\n score_user_1 (float): score of the first user\n score_user_2 (float): score of the second user\n start_time (str, optional): time, when the game started.\n Defaults to None (current time).\n end_state (int, optional): end-state of the game.\n Defaults to GameEndState.WIN.\n is_user1_winner (bool, optional): is user 1 the winner?\n Defaults to True.\n is_user1_disconnected (bool, optional): is user 1 disconnected?\n Defaults to True.

\n", "signature": "(\tgame_id: uuid.UUID,\tuser1_id: int,\tuser2_id: int,\tscore_user_1: float,\tscore_user_2: float,\tstart_time=None,\tend_state: comprl.server.data.interfaces.GameEndState = <GameEndState.WIN: 0>,\tis_user1_winner: bool = True,\tis_user1_disconnected: bool = True)"}, "comprl.server.data.interfaces.GameResult.game_id": {"fullname": "comprl.server.data.interfaces.GameResult.game_id", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.game_id", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.user1_id": {"fullname": "comprl.server.data.interfaces.GameResult.user1_id", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.user1_id", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.user2_id": {"fullname": "comprl.server.data.interfaces.GameResult.user2_id", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.user2_id", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.score_user_1": {"fullname": "comprl.server.data.interfaces.GameResult.score_user_1", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.score_user_1", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.score_user_2": {"fullname": "comprl.server.data.interfaces.GameResult.score_user_2", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.score_user_2", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.start_time": {"fullname": "comprl.server.data.interfaces.GameResult.start_time", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.start_time", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.end_state": {"fullname": "comprl.server.data.interfaces.GameResult.end_state", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.end_state", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.winner_id": {"fullname": "comprl.server.data.interfaces.GameResult.winner_id", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.winner_id", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"fullname": "comprl.server.data.interfaces.GameResult.disconnected_id", "modulename": "comprl.server.data.interfaces", "qualname": "GameResult.disconnected_id", "kind": "variable", "doc": "

\n"}, "comprl.server.data.interfaces.UserRole": {"fullname": "comprl.server.data.interfaces.UserRole", "modulename": "comprl.server.data.interfaces", "qualname": "UserRole", "kind": "class", "doc": "

Represents the possible user roles.

\n\n

Attributes:\n USER: Normal user without administrative rights.\n ADMIN = User with administrative rights.

\n", "bases": "enum.Enum"}, "comprl.server.data.interfaces.UserRole.USER": {"fullname": "comprl.server.data.interfaces.UserRole.USER", "modulename": "comprl.server.data.interfaces", "qualname": "UserRole.USER", "kind": "variable", "doc": "

\n", "default_value": "<UserRole.USER: 'user'>"}, "comprl.server.data.interfaces.UserRole.ADMIN": {"fullname": "comprl.server.data.interfaces.UserRole.ADMIN", "modulename": "comprl.server.data.interfaces", "qualname": "UserRole.ADMIN", "kind": "variable", "doc": "

\n", "default_value": "<UserRole.ADMIN: 'admin'>"}, "comprl.server.data.sql_backend": {"fullname": "comprl.server.data.sql_backend", "modulename": "comprl.server.data.sql_backend", "kind": "module", "doc": "

Implementation of the data access objects for managing game and user data in SQLite.

\n"}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"fullname": "comprl.server.data.sql_backend.SQLiteConnectionInfo", "modulename": "comprl.server.data.sql_backend", "qualname": "SQLiteConnectionInfo", "kind": "class", "doc": "

Represents the connection information for SQLite database.

\n\n

Attributes:\n host (str): The host of the SQLite database.\n table (int): The table number in the database.

\n"}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"fullname": "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__", "modulename": "comprl.server.data.sql_backend", "qualname": "SQLiteConnectionInfo.__init__", "kind": "function", "doc": "

\n", "signature": "(host: str, table: str)"}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"fullname": "comprl.server.data.sql_backend.SQLiteConnectionInfo.host", "modulename": "comprl.server.data.sql_backend", "qualname": "SQLiteConnectionInfo.host", "kind": "variable", "doc": "

\n", "annotation": ": str"}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"fullname": "comprl.server.data.sql_backend.SQLiteConnectionInfo.table", "modulename": "comprl.server.data.sql_backend", "qualname": "SQLiteConnectionInfo.table", "kind": "variable", "doc": "

\n", "annotation": ": str"}, "comprl.server.data.sql_backend.GameData": {"fullname": "comprl.server.data.sql_backend.GameData", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData", "kind": "class", "doc": "

Represents a data access object for managing game data in a SQLite database.

\n\n

Attributes:\n connection (sqlite3.Connection): The connection to the SQLite database.\n cursor (sqlite3.Cursor): The cursor for executing SQL queries.

\n"}, "comprl.server.data.sql_backend.GameData.__init__": {"fullname": "comprl.server.data.sql_backend.GameData.__init__", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData.__init__", "kind": "function", "doc": "

\n", "signature": "(connection: comprl.server.data.sql_backend.SQLiteConnectionInfo)"}, "comprl.server.data.sql_backend.GameData.connection": {"fullname": "comprl.server.data.sql_backend.GameData.connection", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData.connection", "kind": "variable", "doc": "

\n"}, "comprl.server.data.sql_backend.GameData.cursor": {"fullname": "comprl.server.data.sql_backend.GameData.cursor", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData.cursor", "kind": "variable", "doc": "

\n"}, "comprl.server.data.sql_backend.GameData.table": {"fullname": "comprl.server.data.sql_backend.GameData.table", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData.table", "kind": "variable", "doc": "

\n"}, "comprl.server.data.sql_backend.GameData.add": {"fullname": "comprl.server.data.sql_backend.GameData.add", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData.add", "kind": "function", "doc": "

Adds a game result to the database.

\n\n

Args:\n game_result (GameResult): The game result to be added.

\n", "signature": "(self, game_result: comprl.server.data.interfaces.GameResult) -> None:", "funcdef": "def"}, "comprl.server.data.sql_backend.GameData.remove": {"fullname": "comprl.server.data.sql_backend.GameData.remove", "modulename": "comprl.server.data.sql_backend", "qualname": "GameData.remove", "kind": "function", "doc": "

Removes a game from the database based on its ID.

\n\n

Args:\n game_id (str): The ID of the game to be removed.

\n", "signature": "(self, game_id: uuid.UUID) -> None:", "funcdef": "def"}, "comprl.server.data.sql_backend.UserData": {"fullname": "comprl.server.data.sql_backend.UserData", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData", "kind": "class", "doc": "

Represents a data access object for managing game data in a SQLite database.

\n\n

Attributes:\n connection (sqlite3.Connection): The connection to the SQLite database.\n cursor (sqlite3.Cursor): The cursor for executing SQL queries.

\n"}, "comprl.server.data.sql_backend.UserData.__init__": {"fullname": "comprl.server.data.sql_backend.UserData.__init__", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.__init__", "kind": "function", "doc": "

Initializes a new instance of the UserData class.

\n\n

Args:\n connection (SQLiteConnectionInfo): The connection information for SQLite.

\n", "signature": "(connection: comprl.server.data.sql_backend.SQLiteConnectionInfo)"}, "comprl.server.data.sql_backend.UserData.connection": {"fullname": "comprl.server.data.sql_backend.UserData.connection", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.connection", "kind": "variable", "doc": "

\n"}, "comprl.server.data.sql_backend.UserData.cursor": {"fullname": "comprl.server.data.sql_backend.UserData.cursor", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.cursor", "kind": "variable", "doc": "

\n"}, "comprl.server.data.sql_backend.UserData.table": {"fullname": "comprl.server.data.sql_backend.UserData.table", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.table", "kind": "variable", "doc": "

\n"}, "comprl.server.data.sql_backend.UserData.add": {"fullname": "comprl.server.data.sql_backend.UserData.add", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.add", "kind": "function", "doc": "

Adds a new user to the database.

\n\n

Args:\n user_name (str): The name of the user.\n user_password (str): The password of the user.\n user_token (str): The token of the user.\n user_role (UserRole, optional): The role of the user.\n Defaults to UserRole.USER.\n user_mu (float, optional): The mu value of the user. Defaults to 25.\n user_sigma (float, optional): The sigma value of the user. Defaults to 8.33.

\n\n

Returns:\n int: The ID of the newly added user.

\n", "signature": "(\tself,\tuser_name: str,\tuser_password: str,\tuser_token: str,\tuser_role=<UserRole.USER: 'user'>,\tuser_mu=25.0,\tuser_sigma=8.333) -> int:", "funcdef": "def"}, "comprl.server.data.sql_backend.UserData.remove": {"fullname": "comprl.server.data.sql_backend.UserData.remove", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.remove", "kind": "function", "doc": "

Removes a user from the database based on their ID.

\n\n

Args:\n user_id (int): The ID of the user to be removed.

\n", "signature": "(self, user_id: int) -> None:", "funcdef": "def"}, "comprl.server.data.sql_backend.UserData.is_verified": {"fullname": "comprl.server.data.sql_backend.UserData.is_verified", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.is_verified", "kind": "function", "doc": "

Checks if a user is verified based on their token.

\n\n

Args:\n user_token (str): The token of the user.

\n\n

Returns:\n bool: True if the user is verified, False otherwise.

\n", "signature": "(self, user_token: str) -> bool:", "funcdef": "def"}, "comprl.server.data.sql_backend.UserData.get_user_id": {"fullname": "comprl.server.data.sql_backend.UserData.get_user_id", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.get_user_id", "kind": "function", "doc": "

Retrieves the ID of a user based on their token.

\n\n

Args:\n user_token (str): The token of the user.

\n\n

Returns:\n int: The ID of the user, or -1 if the user is not found.

\n", "signature": "(self, user_token: str) -> int | None:", "funcdef": "def"}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"fullname": "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.get_matchmaking_parameters", "kind": "function", "doc": "

Retrieves the matchmaking parameters of a user based on their ID.

\n\n

Args:\n user_id (int): The ID of the user.

\n\n

Returns:\n tuple[float, float]: The mu and sigma values of the user.

\n", "signature": "(self, user_id: int) -> tuple[float, float]:", "funcdef": "def"}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"fullname": "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters", "modulename": "comprl.server.data.sql_backend", "qualname": "UserData.set_matchmaking_parameters", "kind": "function", "doc": "

Sets the matchmaking parameters of a user based on their ID.

\n\n

Args:\n user_id (int): The ID of the user.\n mu (float): The new mu value of the user.\n sigma (float): The new sigma value of the user.

\n", "signature": "(self, user_id: int, mu: float, sigma: float) -> None:", "funcdef": "def"}, "comprl.server.interfaces": {"fullname": "comprl.server.interfaces", "modulename": "comprl.server.interfaces", "kind": "module", "doc": "

This module contains the interfaces for the non-networking logic.

\n"}, "comprl.server.interfaces.IAction": {"fullname": "comprl.server.interfaces.IAction", "modulename": "comprl.server.interfaces", "qualname": "IAction", "kind": "class", "doc": "

Interface for an action

\n"}, "comprl.server.interfaces.IPlayer": {"fullname": "comprl.server.interfaces.IPlayer", "modulename": "comprl.server.interfaces", "qualname": "IPlayer", "kind": "class", "doc": "

Interface for a player

\n", "bases": "abc.ABC"}, "comprl.server.interfaces.IPlayer.id": {"fullname": "comprl.server.interfaces.IPlayer.id", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.id", "kind": "variable", "doc": "

\n", "annotation": ": uuid.UUID"}, "comprl.server.interfaces.IPlayer.user_id": {"fullname": "comprl.server.interfaces.IPlayer.user_id", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.user_id", "kind": "variable", "doc": "

\n", "annotation": ": Optional[int]"}, "comprl.server.interfaces.IPlayer.is_connected": {"fullname": "comprl.server.interfaces.IPlayer.is_connected", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.is_connected", "kind": "variable", "doc": "

\n"}, "comprl.server.interfaces.IPlayer.authenticate": {"fullname": "comprl.server.interfaces.IPlayer.authenticate", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.authenticate", "kind": "function", "doc": "

authenticates player

\n\n

Args:\n result_callback (Callable): callback

\n", "signature": "(self, result_callback):", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.is_ready": {"fullname": "comprl.server.interfaces.IPlayer.is_ready", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.is_ready", "kind": "function", "doc": "

checks if the player is ready to play

\n\n

Returns:\n bool: returns true if the player is ready to play

\n", "signature": "(self, result_callback) -> bool:", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.notify_start": {"fullname": "comprl.server.interfaces.IPlayer.notify_start", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.notify_start", "kind": "function", "doc": "

notifies player that the game has started

\n", "signature": "(self, game_id):", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.get_action": {"fullname": "comprl.server.interfaces.IPlayer.get_action", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.get_action", "kind": "function", "doc": "

gets an action from the player

\n\n

Args:\n obv (Any): observation\n result_callback (Callable): callback

\n\n

Returns:\n IAction: action

\n", "signature": "(self, obv, result_callback) -> comprl.server.interfaces.IAction:", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.notify_end": {"fullname": "comprl.server.interfaces.IPlayer.notify_end", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.notify_end", "kind": "function", "doc": "

notifies player that the game has ended

\n", "signature": "(self, result, stats):", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.disconnect": {"fullname": "comprl.server.interfaces.IPlayer.disconnect", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.disconnect", "kind": "function", "doc": "

disconnect the player

\n", "signature": "(self, reason: str):", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.notify_error": {"fullname": "comprl.server.interfaces.IPlayer.notify_error", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.notify_error", "kind": "function", "doc": "

notifies the player of an error

\n", "signature": "(self, error: str):", "funcdef": "def"}, "comprl.server.interfaces.IPlayer.notify_info": {"fullname": "comprl.server.interfaces.IPlayer.notify_info", "modulename": "comprl.server.interfaces", "qualname": "IPlayer.notify_info", "kind": "function", "doc": "

notifies the player of an information

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.server.interfaces.IGame": {"fullname": "comprl.server.interfaces.IGame", "modulename": "comprl.server.interfaces", "qualname": "IGame", "kind": "class", "doc": "

Interface for a game.

\n\n

Attributes:\n id (GameID):\n The unique identifier of the game.\n players (dict[PlayerID, IPlayer]):\n A dictionary of players participating in the game.\n start_time (datetime):\n The start time of the game.\n finish_callbacks (list[Callable[[\"IGame\"], None]]):\n A list of callbacks to be executed when the game ends.

\n", "bases": "abc.ABC"}, "comprl.server.interfaces.IGame.__init__": {"fullname": "comprl.server.interfaces.IGame.__init__", "modulename": "comprl.server.interfaces", "qualname": "IGame.__init__", "kind": "function", "doc": "

Initializes a new instance of the IGame class.

\n\n

Args:\n players (list[IPlayer]): A list of players participating in the game.

\n", "signature": "(players: list[comprl.server.interfaces.IPlayer])"}, "comprl.server.interfaces.IGame.id": {"fullname": "comprl.server.interfaces.IGame.id", "modulename": "comprl.server.interfaces", "qualname": "IGame.id", "kind": "variable", "doc": "

\n", "annotation": ": uuid.UUID"}, "comprl.server.interfaces.IGame.players": {"fullname": "comprl.server.interfaces.IGame.players", "modulename": "comprl.server.interfaces", "qualname": "IGame.players", "kind": "variable", "doc": "

\n"}, "comprl.server.interfaces.IGame.finish_callbacks": {"fullname": "comprl.server.interfaces.IGame.finish_callbacks", "modulename": "comprl.server.interfaces", "qualname": "IGame.finish_callbacks", "kind": "variable", "doc": "

\n", "annotation": ": list[typing.Callable[[comprl.server.interfaces.IGame], NoneType]]"}, "comprl.server.interfaces.IGame.scores": {"fullname": "comprl.server.interfaces.IGame.scores", "modulename": "comprl.server.interfaces", "qualname": "IGame.scores", "kind": "variable", "doc": "

\n", "annotation": ": dict[uuid.UUID, float]"}, "comprl.server.interfaces.IGame.start_time": {"fullname": "comprl.server.interfaces.IGame.start_time", "modulename": "comprl.server.interfaces", "qualname": "IGame.start_time", "kind": "variable", "doc": "

\n"}, "comprl.server.interfaces.IGame.disconnected_player_id": {"fullname": "comprl.server.interfaces.IGame.disconnected_player_id", "modulename": "comprl.server.interfaces", "qualname": "IGame.disconnected_player_id", "kind": "variable", "doc": "

\n", "annotation": ": uuid.UUID | None"}, "comprl.server.interfaces.IGame.game_info": {"fullname": "comprl.server.interfaces.IGame.game_info", "modulename": "comprl.server.interfaces", "qualname": "IGame.game_info", "kind": "variable", "doc": "

\n", "annotation": ": dict[str, list[numpy.ndarray]]"}, "comprl.server.interfaces.IGame.all_actions": {"fullname": "comprl.server.interfaces.IGame.all_actions", "modulename": "comprl.server.interfaces", "qualname": "IGame.all_actions", "kind": "variable", "doc": "

\n", "annotation": ": list[numpy.ndarray]"}, "comprl.server.interfaces.IGame.add_finish_callback": {"fullname": "comprl.server.interfaces.IGame.add_finish_callback", "modulename": "comprl.server.interfaces", "qualname": "IGame.add_finish_callback", "kind": "function", "doc": "

Adds a callback function to be executed when the game ends.

\n\n

Args:\n callback (Callable[[\"IGame\"], None]): The callback function to be added.

\n", "signature": "(\tself,\tcallback: Callable[[comprl.server.interfaces.IGame], NoneType]) -> None:", "funcdef": "def"}, "comprl.server.interfaces.IGame.start": {"fullname": "comprl.server.interfaces.IGame.start", "modulename": "comprl.server.interfaces", "qualname": "IGame.start", "kind": "function", "doc": "

Notifies all players that the game has started and starts the game cycle.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.server.interfaces.IGame.force_end": {"fullname": "comprl.server.interfaces.IGame.force_end", "modulename": "comprl.server.interfaces", "qualname": "IGame.force_end", "kind": "function", "doc": "

forces the end of the game. Should be used when a player disconnects.

\n\n

Args:\n player_id (PlayerID): the player that caused the forced end (disconnected)

\n", "signature": "(self, player_id: uuid.UUID):", "funcdef": "def"}, "comprl.server.interfaces.IGame.get_result": {"fullname": "comprl.server.interfaces.IGame.get_result", "modulename": "comprl.server.interfaces", "qualname": "IGame.get_result", "kind": "function", "doc": "

Returns the result of the game.

\n\n

Returns:\n GameResult: The result of the game.

\n", "signature": "(self) -> comprl.server.data.interfaces.GameResult | None:", "funcdef": "def"}, "comprl.server.interfaces.IServer": {"fullname": "comprl.server.interfaces.IServer", "modulename": "comprl.server.interfaces", "qualname": "IServer", "kind": "class", "doc": "

Interface for the server.

\n\n

This interface defines the methods that a server implementation should provide.

\n"}, "comprl.server.interfaces.IServer.on_start": {"fullname": "comprl.server.interfaces.IServer.on_start", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_start", "kind": "function", "doc": "

Gets called when the server starts.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.server.interfaces.IServer.on_stop": {"fullname": "comprl.server.interfaces.IServer.on_stop", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_stop", "kind": "function", "doc": "

Gets called when the server stops.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.server.interfaces.IServer.on_connect": {"fullname": "comprl.server.interfaces.IServer.on_connect", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_connect", "kind": "function", "doc": "

Gets called when a player connects.\nArgs:\n player (IPlayer): The player that has connected.

\n", "signature": "(self, player: comprl.server.interfaces.IPlayer):", "funcdef": "def"}, "comprl.server.interfaces.IServer.on_disconnect": {"fullname": "comprl.server.interfaces.IServer.on_disconnect", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_disconnect", "kind": "function", "doc": "

Gets called when a player disconnects.\nArgs:\n player (IPlayer): The player that has disconnected.

\n", "signature": "(self, player: comprl.server.interfaces.IPlayer):", "funcdef": "def"}, "comprl.server.interfaces.IServer.on_timeout": {"fullname": "comprl.server.interfaces.IServer.on_timeout", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_timeout", "kind": "function", "doc": "

Gets called when a player has a timeout.\nArgs:\n player (IPlayer): The player that has a timeout.

\n", "signature": "(self, player: comprl.server.interfaces.IPlayer, failure, timeout):", "funcdef": "def"}, "comprl.server.interfaces.IServer.on_remote_error": {"fullname": "comprl.server.interfaces.IServer.on_remote_error", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_remote_error", "kind": "function", "doc": "

Gets called when an error in deferred occurs.\nArgs:\n player (IPlayer): The player that caused the error.\n error (Exception): Error that occurred

\n", "signature": "(self, player: comprl.server.interfaces.IPlayer, error):", "funcdef": "def"}, "comprl.server.interfaces.IServer.on_update": {"fullname": "comprl.server.interfaces.IServer.on_update", "modulename": "comprl.server.interfaces", "qualname": "IServer.on_update", "kind": "function", "doc": "

Gets called when the server updates.\nFrequency depends on the final implementation.

\n", "signature": "(self):", "funcdef": "def"}, "comprl.server.managers": {"fullname": "comprl.server.managers", "modulename": "comprl.server.managers", "kind": "module", "doc": "

This module contains classes that manage game instances and players.

\n"}, "comprl.server.managers.GameManager": {"fullname": "comprl.server.managers.GameManager", "modulename": "comprl.server.managers", "qualname": "GameManager", "kind": "class", "doc": "

A class that manages game instances of a specific game type.

\n\n

Attributes:\n games (dict[GameID, IGame]): A dictionary that stores active game instances.\n game_type (Type[IGame]): The type of game to be managed.

\n"}, "comprl.server.managers.GameManager.__init__": {"fullname": "comprl.server.managers.GameManager.__init__", "modulename": "comprl.server.managers", "qualname": "GameManager.__init__", "kind": "function", "doc": "

\n", "signature": "(game_type: Type[comprl.server.interfaces.IGame])"}, "comprl.server.managers.GameManager.games": {"fullname": "comprl.server.managers.GameManager.games", "modulename": "comprl.server.managers", "qualname": "GameManager.games", "kind": "variable", "doc": "

\n", "annotation": ": dict[uuid.UUID, comprl.server.interfaces.IGame]"}, "comprl.server.managers.GameManager.game_type": {"fullname": "comprl.server.managers.GameManager.game_type", "modulename": "comprl.server.managers", "qualname": "GameManager.game_type", "kind": "variable", "doc": "

\n"}, "comprl.server.managers.GameManager.start_game": {"fullname": "comprl.server.managers.GameManager.start_game", "modulename": "comprl.server.managers", "qualname": "GameManager.start_game", "kind": "function", "doc": "

Starts a new game instance with the given players.

\n\n

Args:\n players (list[IPlayer]): A list of players participating in the game.

\n\n

Returns:\n GameID: The ID of the newly started game.

\n", "signature": "(\tself,\tplayers: list[comprl.server.interfaces.IPlayer]) -> comprl.server.interfaces.IGame:", "funcdef": "def"}, "comprl.server.managers.GameManager.end_game": {"fullname": "comprl.server.managers.GameManager.end_game", "modulename": "comprl.server.managers", "qualname": "GameManager.end_game", "kind": "function", "doc": "

Ends the game instance with the specified ID.

\n\n

Args:\n game_id (GameID): The ID of the game to be ended.

\n", "signature": "(self, game: comprl.server.interfaces.IGame) -> None:", "funcdef": "def"}, "comprl.server.managers.GameManager.force_game_end": {"fullname": "comprl.server.managers.GameManager.force_game_end", "modulename": "comprl.server.managers", "qualname": "GameManager.force_game_end", "kind": "function", "doc": "

Forces all games, that a player is currently playing, to end.

\n\n

Args:\n player_id (PlayerID): id of the player

\n", "signature": "(self, player_id: uuid.UUID):", "funcdef": "def"}, "comprl.server.managers.GameManager.get": {"fullname": "comprl.server.managers.GameManager.get", "modulename": "comprl.server.managers", "qualname": "GameManager.get", "kind": "function", "doc": "

Retrieves the game instance with the specified ID.

\n\n

Args:\n game_id (GameID): The ID of the game to be retrieved.

\n\n

Returns:\n Optional[IGame]: The game instance if found, None otherwise.

\n", "signature": "(self, game_id: uuid.UUID) -> comprl.server.interfaces.IGame | None:", "funcdef": "def"}, "comprl.server.managers.GameManager.get_stored_actions": {"fullname": "comprl.server.managers.GameManager.get_stored_actions", "modulename": "comprl.server.managers", "qualname": "GameManager.get_stored_actions", "kind": "function", "doc": "

get a game from the log file

\n\n

Args:\n game_id (GameID): id of the game we want to get\nReturns:\n dict[str, list[np.ndarray]]: the dict containing the actions and possible\n more info

\n", "signature": "(self, game_id: uuid.UUID) -> dict[str, list[numpy.ndarray]]:", "funcdef": "def"}, "comprl.server.managers.PlayerManager": {"fullname": "comprl.server.managers.PlayerManager", "modulename": "comprl.server.managers", "qualname": "PlayerManager", "kind": "class", "doc": "

Manages connected players.

\n"}, "comprl.server.managers.PlayerManager.auth_players": {"fullname": "comprl.server.managers.PlayerManager.auth_players", "modulename": "comprl.server.managers", "qualname": "PlayerManager.auth_players", "kind": "variable", "doc": "

\n", "annotation": ": dict[uuid.UUID, tuple[comprl.server.interfaces.IPlayer, int]]"}, "comprl.server.managers.PlayerManager.connected_players": {"fullname": "comprl.server.managers.PlayerManager.connected_players", "modulename": "comprl.server.managers", "qualname": "PlayerManager.connected_players", "kind": "variable", "doc": "

\n", "annotation": ": dict[uuid.UUID, comprl.server.interfaces.IPlayer]"}, "comprl.server.managers.PlayerManager.add": {"fullname": "comprl.server.managers.PlayerManager.add", "modulename": "comprl.server.managers", "qualname": "PlayerManager.add", "kind": "function", "doc": "

Adds a player to the manager.

\n\n

Args:\n player (IPlayer): The player object to be added.

\n\n

Returns:\n None

\n", "signature": "(self, player: comprl.server.interfaces.IPlayer) -> None:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.auth": {"fullname": "comprl.server.managers.PlayerManager.auth", "modulename": "comprl.server.managers", "qualname": "PlayerManager.auth", "kind": "function", "doc": "

Authenticates a player using their player ID and token.

\n\n

Args:\n player_id (PlayerID): The ID of the player.\n token (str): The authentication token.

\n\n

Returns:\n bool: True if the authentication is successful, False otherwise.

\n", "signature": "(self, player_id: uuid.UUID, token: str) -> bool:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.remove": {"fullname": "comprl.server.managers.PlayerManager.remove", "modulename": "comprl.server.managers", "qualname": "PlayerManager.remove", "kind": "function", "doc": "

Removes a player from the manager.

\n\n

Args:\n player (IPlayer): The player object to be removed.

\n\n

Returns:\n None

\n", "signature": "(self, player: comprl.server.interfaces.IPlayer) -> None:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.get_user_id": {"fullname": "comprl.server.managers.PlayerManager.get_user_id", "modulename": "comprl.server.managers", "qualname": "PlayerManager.get_user_id", "kind": "function", "doc": "

Retrieves the user ID associated with a player.

\n\n

Args:\n player_id (PlayerID): The ID of the player.

\n\n

Returns:\n Optional[int]: The user ID if found, None otherwise.

\n", "signature": "(self, player_id: uuid.UUID) -> int | None:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.get_player_by_id": {"fullname": "comprl.server.managers.PlayerManager.get_player_by_id", "modulename": "comprl.server.managers", "qualname": "PlayerManager.get_player_by_id", "kind": "function", "doc": "

Retrieves the player object associated with a player ID.\nThis only works for authenticated players.

\n\n

Args:\n player_id (PlayerID): The ID of the player.

\n\n

Returns:\n Optional[IPlayer]: The player object if found, None otherwise.

\n", "signature": "(self, player_id: uuid.UUID) -> comprl.server.interfaces.IPlayer | None:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.broadcast_error": {"fullname": "comprl.server.managers.PlayerManager.broadcast_error", "modulename": "comprl.server.managers", "qualname": "PlayerManager.broadcast_error", "kind": "function", "doc": "

Broadcasts a message to all connected players.

\n\n

Args:\n msg (str): The message to be broadcasted.

\n\n

Returns:\n None

\n", "signature": "(self, msg: str) -> None:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.disconnect_all": {"fullname": "comprl.server.managers.PlayerManager.disconnect_all", "modulename": "comprl.server.managers", "qualname": "PlayerManager.disconnect_all", "kind": "function", "doc": "

Disconnects all connected players.

\n\n

Args:\n reason (str): The reason for disconnection.

\n\n

Returns:\n None

\n", "signature": "(self, reason: str) -> None:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"fullname": "comprl.server.managers.PlayerManager.get_matchmaking_parameters", "modulename": "comprl.server.managers", "qualname": "PlayerManager.get_matchmaking_parameters", "kind": "function", "doc": "

Retrieves the matchmaking parameters of a user based on their ID.

\n\n

Args:\n user_id (int): The ID of the user.

\n\n

Returns:\n tuple[float, float]: The mu and sigma values of the user.

\n", "signature": "(self, user_id: int) -> tuple[float, float]:", "funcdef": "def"}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"fullname": "comprl.server.managers.PlayerManager.update_matchmaking_parameters", "modulename": "comprl.server.managers", "qualname": "PlayerManager.update_matchmaking_parameters", "kind": "function", "doc": "

Updates the matchmaking parameters of a user based on their ID.

\n\n

Args:\n user_id (int): The ID of the user.\n new_mu (float): The new mu value of the user.\n new_sigma (float): The new sigma value of the user.

\n", "signature": "(self, user_id: int, new_mu: float, new_sigma: float) -> None:", "funcdef": "def"}, "comprl.server.managers.QueuePlayer": {"fullname": "comprl.server.managers.QueuePlayer", "modulename": "comprl.server.managers", "qualname": "QueuePlayer", "kind": "variable", "doc": "

\n", "annotation": ": TypeAlias", "default_value": "tuple[uuid.UUID, int, float, float, datetime.datetime]"}, "comprl.server.managers.MatchmakingManager": {"fullname": "comprl.server.managers.MatchmakingManager", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager", "kind": "class", "doc": "

handles matchmaking between players and starts the game

\n"}, "comprl.server.managers.MatchmakingManager.__init__": {"fullname": "comprl.server.managers.MatchmakingManager.__init__", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.__init__", "kind": "function", "doc": "

Initializes a MatchmakingManager object.

\n\n

Args:\n player_manager (PlayerManager): The player manager object.\n game_manager (GameManager): The game manager object.

\n", "signature": "(\tplayer_manager: comprl.server.managers.PlayerManager,\tgame_manager: comprl.server.managers.GameManager)"}, "comprl.server.managers.MatchmakingManager.player_manager": {"fullname": "comprl.server.managers.MatchmakingManager.player_manager", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.player_manager", "kind": "variable", "doc": "

\n"}, "comprl.server.managers.MatchmakingManager.game_manager": {"fullname": "comprl.server.managers.MatchmakingManager.game_manager", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.game_manager", "kind": "variable", "doc": "

\n"}, "comprl.server.managers.MatchmakingManager.model": {"fullname": "comprl.server.managers.MatchmakingManager.model", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.model", "kind": "variable", "doc": "

\n"}, "comprl.server.managers.MatchmakingManager.try_match": {"fullname": "comprl.server.managers.MatchmakingManager.try_match", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.try_match", "kind": "function", "doc": "

Tries to add a player with the given player ID to the matchmaking queue.

\n\n

Args:\n player_id (PlayerID): The ID of the player to match.

\n\n

Returns:\n None

\n", "signature": "(self, player_id: uuid.UUID) -> None:", "funcdef": "def"}, "comprl.server.managers.MatchmakingManager.match": {"fullname": "comprl.server.managers.MatchmakingManager.match", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.match", "kind": "function", "doc": "

Adds player to the queue.

\n\n

Args:\n player_id (PlayerID): The ID of the player to be matched.

\n", "signature": "(self, player_id: uuid.UUID) -> None:", "funcdef": "def"}, "comprl.server.managers.MatchmakingManager.remove": {"fullname": "comprl.server.managers.MatchmakingManager.remove", "modulename": "comprl.server.managers", "qualname": "MatchmakingManager.remove", "kind": "function", "doc": "

Removes a player from the matchmaking queue.

\n\n

Args:\n player_id (PlayerID): The ID of the player to be removed.

\n", "signature": "(self, player_id: uuid.UUID) -> None:", "funcdef": "def"}, "comprl.server.networking": {"fullname": "comprl.server.networking", "modulename": "comprl.server.networking", "kind": "module", "doc": "

contains the networking components of the server

\n"}, "comprl.server.networking.VERSION": {"fullname": "comprl.server.networking.VERSION", "modulename": "comprl.server.networking", "qualname": "VERSION", "kind": "variable", "doc": "

\n", "annotation": ": int", "default_value": "1"}, "comprl.server.networking.COMPServerProtocol": {"fullname": "comprl.server.networking.COMPServerProtocol", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol", "kind": "class", "doc": "

Represents the server-side protocol for the COMP server.

\n\n

This class extends the amp.AMP class and provides methods for handling\nvarious events and interactions with the client.

\n\n

Attributes:\n connection_made_callbacks (list[Callable[[], None]]): List of callbacks\n to be executed when the connection is made.\n connection_lost_callbacks (list[Callable[[], None]]): List of callbacks\n to be executed when the connection is lost.

\n", "bases": "twisted.protocols.amp.AMP"}, "comprl.server.networking.COMPServerProtocol.__init__": {"fullname": "comprl.server.networking.COMPServerProtocol.__init__", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.__init__", "kind": "function", "doc": "

\n", "signature": "(boxReceiver=None, locator=None)"}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"fullname": "comprl.server.networking.COMPServerProtocol.connection_made_callbacks", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connection_made_callbacks", "kind": "variable", "doc": "

\n", "annotation": ": list[typing.Callable[[], NoneType]]"}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"fullname": "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connection_lost_callbacks", "kind": "variable", "doc": "

\n", "annotation": ": list[typing.Callable[[], NoneType]]"}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"fullname": "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connection_timeout_callbacks", "kind": "variable", "doc": "

\n", "annotation": ": list[typing.Callable[[typing.Any, typing.Any], NoneType]]"}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"fullname": "comprl.server.networking.COMPServerProtocol.connection_error_callbacks", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connection_error_callbacks", "kind": "variable", "doc": "

\n", "annotation": ": list[typing.Callable[[typing.Any], NoneType]]"}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"fullname": "comprl.server.networking.COMPServerProtocol.add_connection_made_callback", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.add_connection_made_callback", "kind": "function", "doc": "

adds callback that is executed, when the connection is made

\n\n

Args:\n callback (function): callback to execute, when the connection is made

\n\n

Returns:\n None

\n", "signature": "(self, callback: Callable[[], NoneType]):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"fullname": "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.add_connection_lost_callback", "kind": "function", "doc": "

Adds a callback function to be executed when the connection is lost.

\n\n

Args:\n callback: The callback function to be added.

\n\n

Returns:\n None

\n", "signature": "(self, callback: Callable[[], NoneType]):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"fullname": "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.add_connection_timeout_callback", "kind": "function", "doc": "

Adds a callback function to be executed when there is a timeout.

\n\n

Args:\n callback: The callback function to be added.

\n\n

Returns:\n None

\n", "signature": "(self, callback: Callable[[Any, Any], NoneType]):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"fullname": "comprl.server.networking.COMPServerProtocol.add_connection_error_callback", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.add_connection_error_callback", "kind": "function", "doc": "

Adds a callback function to be executed when there occurs an error in deferred.

\n\n

Args:\n callback: The callback function to be added.

\n\n

Returns:\n None

\n", "signature": "(self, callback: Callable[[Any], NoneType]):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"fullname": "comprl.server.networking.COMPServerProtocol.connectionMade", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connectionMade", "kind": "function", "doc": "

Called when the connection to the client is established.

\n\n

Returns:\n None

\n", "signature": "(self) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"fullname": "comprl.server.networking.COMPServerProtocol.connectionLost", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connectionLost", "kind": "function", "doc": "

Called when the connection to the client is lost.

\n\n

Args:\n reason: The reason for the connection loss.

\n\n

Returns:\n None

\n", "signature": "(self, reason):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"fullname": "comprl.server.networking.COMPServerProtocol.connectionTimeout", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connectionTimeout", "kind": "function", "doc": "

Handles the timeout event for a connection.

\n\n

Args:\n failure: The failure object representing the timeout.\n timeout: The timeout value in seconds.\nReturns:\n None

\n", "signature": "(self, failure, timeout) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.connection_error": {"fullname": "comprl.server.networking.COMPServerProtocol.connection_error", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.connection_error", "kind": "function", "doc": "

Is called when an error in Deferred occurs

\n\n

Args:\n place : where the error was caused\n error : description of the error

\n", "signature": "(self, error) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.get_token": {"fullname": "comprl.server.networking.COMPServerProtocol.get_token", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.get_token", "kind": "function", "doc": "

Retrieves a token from the client and calls the return_callback\nfunction with the token.

\n\n

Args:\n return_callback (Callable[[str], None]): A callback function that takes\n a string parameter.

\n\n

Returns:\n None

\n", "signature": "(self, return_callback: Callable[[str], NoneType]) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.is_ready": {"fullname": "comprl.server.networking.COMPServerProtocol.is_ready", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.is_ready", "kind": "function", "doc": "

Checks if the client is ready.

\n\n

Args:\n return_callback (Callable[[bool], None]): A callback function that will\n be called with the result of the check.

\n\n

Returns:\n bool: Containing the information if the client is ready.

\n", "signature": "(self, return_callback: Callable[[bool], NoneType]) -> bool:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.notify_start": {"fullname": "comprl.server.networking.COMPServerProtocol.notify_start", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.notify_start", "kind": "function", "doc": "

Notifies the client that a game has started.

\n\n

Args:\n game_id (GameID): The ID of the game that has started.

\n", "signature": "(self, game_id: uuid.UUID) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.get_step": {"fullname": "comprl.server.networking.COMPServerProtocol.get_step", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.get_step", "kind": "function", "doc": "

Sends an observation to the remote client and retrieves the corresponding\naction.

\n\n

Args:\n obv (list[float]): The observation to send to the client.\n return_callback (Callable[[list], None]): The callback function to be\n called with the retrieved action.

\n\n

Returns:\n None

\n", "signature": "(\tself,\tobv: list[float],\treturn_callback: Callable[[list], NoneType]) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.notify_end": {"fullname": "comprl.server.networking.COMPServerProtocol.notify_end", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.notify_end", "kind": "function", "doc": "

Notifies the remote client about the end of the game.

\n\n

Args:\n result: The result of the game.\n stats: The statistics of the game.

\n\n

Returns:\n None

\n", "signature": "(self, result, stats) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.send_error": {"fullname": "comprl.server.networking.COMPServerProtocol.send_error", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.send_error", "kind": "function", "doc": "

Send an error string to the client.

\n\n

Args:\n msg (str): The error message to send.

\n\n

Returns:\n None

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.send_message": {"fullname": "comprl.server.networking.COMPServerProtocol.send_message", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.send_message", "kind": "function", "doc": "

Send a message string to the client.

\n\n

Args:\n msg (str): The message to send.

\n\n

Returns:\n None

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.server.networking.COMPServerProtocol.disconnect": {"fullname": "comprl.server.networking.COMPServerProtocol.disconnect", "modulename": "comprl.server.networking", "qualname": "COMPServerProtocol.disconnect", "kind": "function", "doc": "

Disconnects the client from the server.

\n\n

Returns:\n None

\n", "signature": "(self):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer": {"fullname": "comprl.server.networking.COMPPlayer", "modulename": "comprl.server.networking", "qualname": "COMPPlayer", "kind": "class", "doc": "

Represents a player in the COMP game.

\n\n

Attributes:\n connection (COMPServerProtocol): The networking connection for the player.

\n", "bases": "comprl.server.interfaces.IPlayer"}, "comprl.server.networking.COMPPlayer.__init__": {"fullname": "comprl.server.networking.COMPPlayer.__init__", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.__init__", "kind": "function", "doc": "

Initialize the COMPPlayer instance.

\n\n

Args:\n connection (COMPServerProtocol): The networking connection for the player.

\n", "signature": "(connection: comprl.server.networking.COMPServerProtocol)"}, "comprl.server.networking.COMPPlayer.connection": {"fullname": "comprl.server.networking.COMPPlayer.connection", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.connection", "kind": "variable", "doc": "

\n", "annotation": ": comprl.server.networking.COMPServerProtocol"}, "comprl.server.networking.COMPPlayer.is_connected": {"fullname": "comprl.server.networking.COMPPlayer.is_connected", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.is_connected", "kind": "variable", "doc": "

\n", "annotation": ": bool"}, "comprl.server.networking.COMPPlayer.authenticate": {"fullname": "comprl.server.networking.COMPPlayer.authenticate", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.authenticate", "kind": "function", "doc": "

Authenticates the player.

\n\n

Args:\n result_callback (callback function):\n The callback to handle the authentication result.

\n\n

Returns:\n token (string): The authentication token.

\n", "signature": "(self, result_callback):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.is_ready": {"fullname": "comprl.server.networking.COMPPlayer.is_ready", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.is_ready", "kind": "function", "doc": "

Checks if the player is ready to play.

\n\n

Args:\n result_callback (callback function): The callback to handle the result.

\n\n

Returns:\n bool: True if the player is ready to play, False otherwise.

\n", "signature": "(self, result_callback) -> bool:", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.notify_start": {"fullname": "comprl.server.networking.COMPPlayer.notify_start", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.notify_start", "kind": "function", "doc": "

Notifies the player about the start of the game.

\n\n

Args:\n game_id (GameID): The ID of the game.

\n", "signature": "(self, game_id: uuid.UUID):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.get_action": {"fullname": "comprl.server.networking.COMPPlayer.get_action", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.get_action", "kind": "function", "doc": "

Receives the action from the server.

\n\n

Args:\n obv (any): The observation.\n result_callback (callback function): The callback to handle the result.

\n", "signature": "(self, obv, result_callback):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.notify_end": {"fullname": "comprl.server.networking.COMPPlayer.notify_end", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.notify_end", "kind": "function", "doc": "

Called when the game ends.

\n\n

Args:\n result (any): The result of the game.\n stats (any): The stats of the game.

\n", "signature": "(self, result, stats):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.disconnect": {"fullname": "comprl.server.networking.COMPPlayer.disconnect", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.disconnect", "kind": "function", "doc": "

Disconnects the player.

\n\n

Args:\n reason (str): The reason for the disconnection.

\n", "signature": "(self, reason: str):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.notify_error": {"fullname": "comprl.server.networking.COMPPlayer.notify_error", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.notify_error", "kind": "function", "doc": "

Notifies the player of an error.

\n\n

Args:\n error (str): The error message.

\n", "signature": "(self, error: str):", "funcdef": "def"}, "comprl.server.networking.COMPPlayer.notify_info": {"fullname": "comprl.server.networking.COMPPlayer.notify_info", "modulename": "comprl.server.networking", "qualname": "COMPPlayer.notify_info", "kind": "function", "doc": "

Notifies the player of an information.

\n\n

Args:\n msg (str): The information message.

\n", "signature": "(self, msg: str):", "funcdef": "def"}, "comprl.server.networking.COMPFactory": {"fullname": "comprl.server.networking.COMPFactory", "modulename": "comprl.server.networking", "qualname": "COMPFactory", "kind": "class", "doc": "

Factory for COMP servers.

\n\n

This class represents a factory for creating COMP servers.\nIt is responsible for starting and stopping the server, as well as building\nthe protocol for incoming connections.

\n\n

Attributes:\n server (IServer): The server instance associated with this factory.

\n", "bases": "twisted.internet.protocol.ServerFactory"}, "comprl.server.networking.COMPFactory.__init__": {"fullname": "comprl.server.networking.COMPFactory.__init__", "modulename": "comprl.server.networking", "qualname": "COMPFactory.__init__", "kind": "function", "doc": "

\n", "signature": "(server: comprl.server.interfaces.IServer)"}, "comprl.server.networking.COMPFactory.server": {"fullname": "comprl.server.networking.COMPFactory.server", "modulename": "comprl.server.networking", "qualname": "COMPFactory.server", "kind": "variable", "doc": "

\n", "annotation": ": comprl.server.interfaces.IServer"}, "comprl.server.networking.COMPFactory.startFactory": {"fullname": "comprl.server.networking.COMPFactory.startFactory", "modulename": "comprl.server.networking", "qualname": "COMPFactory.startFactory", "kind": "function", "doc": "

Start the server factory.

\n", "signature": "(self) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPFactory.stopFactory": {"fullname": "comprl.server.networking.COMPFactory.stopFactory", "modulename": "comprl.server.networking", "qualname": "COMPFactory.stopFactory", "kind": "function", "doc": "

Stop the server factory.

\n", "signature": "(self) -> None:", "funcdef": "def"}, "comprl.server.networking.COMPFactory.buildProtocol": {"fullname": "comprl.server.networking.COMPFactory.buildProtocol", "modulename": "comprl.server.networking", "qualname": "COMPFactory.buildProtocol", "kind": "function", "doc": "

Build the protocol for incoming connections.

\n\n

Args:\n addr (IAddress): The address of the incoming connection.

\n\n

Returns:\n Protocol | None: The protocol for the incoming connection.

\n", "signature": "(\tself,\taddr: <InterfaceClass twisted.internet.interfaces.IAddress>) -> twisted.internet.protocol.Protocol | None:", "funcdef": "def"}, "comprl.server.networking.launch_server": {"fullname": "comprl.server.networking.launch_server", "modulename": "comprl.server.networking", "qualname": "launch_server", "kind": "function", "doc": "

Create a COMP server.

\n\n

Args:\n server (IServer): The server instance to be used.\n port (int): The port number of the server. Defaults to 65335.

\n", "signature": "(server: comprl.server.interfaces.IServer, port: int = 65335) -> None:", "funcdef": "def"}, "comprl.server.util": {"fullname": "comprl.server.util", "modulename": "comprl.server.util", "kind": "module", "doc": "

This module contains utility functions for the server.

\n"}, "comprl.server.util.IDGenerator": {"fullname": "comprl.server.util.IDGenerator", "modulename": "comprl.server.util", "qualname": "IDGenerator", "kind": "class", "doc": "

handles the creation of id's

\n"}, "comprl.server.util.IDGenerator.generate_player_id": {"fullname": "comprl.server.util.IDGenerator.generate_player_id", "modulename": "comprl.server.util", "qualname": "IDGenerator.generate_player_id", "kind": "function", "doc": "

generates a unique id for players

\n\n

Returns:\n PlayerID: obtained id

\n", "signature": "() -> uuid.UUID:", "funcdef": "def"}, "comprl.server.util.IDGenerator.generate_game_id": {"fullname": "comprl.server.util.IDGenerator.generate_game_id", "modulename": "comprl.server.util", "qualname": "IDGenerator.generate_game_id", "kind": "function", "doc": "

generates a unique id for games

\n\n

Returns:\n GameID: obtained id

\n", "signature": "() -> uuid.UUID:", "funcdef": "def"}, "comprl.server.util.ConfigProvider": {"fullname": "comprl.server.util.ConfigProvider", "modulename": "comprl.server.util", "qualname": "ConfigProvider", "kind": "class", "doc": "

provides configuration settings

\n"}, "comprl.server.util.ConfigProvider.get": {"fullname": "comprl.server.util.ConfigProvider.get", "modulename": "comprl.server.util", "qualname": "ConfigProvider.get", "kind": "function", "doc": "

gets a configuration setting

\n\n

Args:\n key (str): key of the setting

\n\n

Returns:\n Any: value of the setting

\n", "signature": "(key):", "funcdef": "def"}, "comprl.server.util.ConfigProvider.set": {"fullname": "comprl.server.util.ConfigProvider.set", "modulename": "comprl.server.util", "qualname": "ConfigProvider.set", "kind": "function", "doc": "

sets a configuration setting

\n\n

Args:\n key (str): key of the setting\n value (Any): value of the setting

\n", "signature": "(key, value):", "funcdef": "def"}, "comprl.shared": {"fullname": "comprl.shared", "modulename": "comprl.shared", "kind": "module", "doc": "

\n"}, "comprl.shared.commands": {"fullname": "comprl.shared.commands", "modulename": "comprl.shared.commands", "kind": "module", "doc": "

Defines the commands used for the server client communication.

\n"}, "comprl.shared.commands.Auth": {"fullname": "comprl.shared.commands.Auth", "modulename": "comprl.shared.commands", "qualname": "Auth", "kind": "class", "doc": "

Command for authenticating the client with the server.

\n\n

Arguments:\n token (String): Token of the client\n version (Integer): Version number of the running client framework

\n\n

Response:\n uuid (Integer): UUID assigned by the server to the client

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.Auth.arguments": {"fullname": "comprl.shared.commands.Auth.arguments", "modulename": "comprl.shared.commands", "qualname": "Auth.arguments", "kind": "variable", "doc": "

\n", "default_value": "[]"}, "comprl.shared.commands.Auth.response": {"fullname": "comprl.shared.commands.Auth.response", "modulename": "comprl.shared.commands", "qualname": "Auth.response", "kind": "variable", "doc": "

\n", "default_value": "[(b'token', <twisted.protocols.amp.String object>), (b'version', <twisted.protocols.amp.Integer object>)]"}, "comprl.shared.commands.Auth.reverseErrors": {"fullname": "comprl.shared.commands.Auth.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "Auth.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Auth.allErrors": {"fullname": "comprl.shared.commands.Auth.allErrors", "modulename": "comprl.shared.commands", "qualname": "Auth.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Auth.commandName": {"fullname": "comprl.shared.commands.Auth.commandName", "modulename": "comprl.shared.commands", "qualname": "Auth.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'Auth'"}, "comprl.shared.commands.Ready": {"fullname": "comprl.shared.commands.Ready", "modulename": "comprl.shared.commands", "qualname": "Ready", "kind": "class", "doc": "

Command to check if the client is ready to start the game

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.Ready.arguments": {"fullname": "comprl.shared.commands.Ready.arguments", "modulename": "comprl.shared.commands", "qualname": "Ready.arguments", "kind": "variable", "doc": "

\n", "default_value": "[]"}, "comprl.shared.commands.Ready.response": {"fullname": "comprl.shared.commands.Ready.response", "modulename": "comprl.shared.commands", "qualname": "Ready.response", "kind": "variable", "doc": "

\n", "default_value": "[(b'ready', <twisted.protocols.amp.Boolean object>)]"}, "comprl.shared.commands.Ready.reverseErrors": {"fullname": "comprl.shared.commands.Ready.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "Ready.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Ready.allErrors": {"fullname": "comprl.shared.commands.Ready.allErrors", "modulename": "comprl.shared.commands", "qualname": "Ready.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Ready.commandName": {"fullname": "comprl.shared.commands.Ready.commandName", "modulename": "comprl.shared.commands", "qualname": "Ready.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'Ready'"}, "comprl.shared.commands.StartGame": {"fullname": "comprl.shared.commands.StartGame", "modulename": "comprl.shared.commands", "qualname": "StartGame", "kind": "class", "doc": "

Command to notify the client that the game starts

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.StartGame.arguments": {"fullname": "comprl.shared.commands.StartGame.arguments", "modulename": "comprl.shared.commands", "qualname": "StartGame.arguments", "kind": "variable", "doc": "

\n", "default_value": "[(b'game_id', <twisted.protocols.amp.String object>)]"}, "comprl.shared.commands.StartGame.response": {"fullname": "comprl.shared.commands.StartGame.response", "modulename": "comprl.shared.commands", "qualname": "StartGame.response", "kind": "variable", "doc": "

\n", "default_value": "[]"}, "comprl.shared.commands.StartGame.reverseErrors": {"fullname": "comprl.shared.commands.StartGame.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "StartGame.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.StartGame.allErrors": {"fullname": "comprl.shared.commands.StartGame.allErrors", "modulename": "comprl.shared.commands", "qualname": "StartGame.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.StartGame.commandName": {"fullname": "comprl.shared.commands.StartGame.commandName", "modulename": "comprl.shared.commands", "qualname": "StartGame.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'StartGame'"}, "comprl.shared.commands.EndGame": {"fullname": "comprl.shared.commands.EndGame", "modulename": "comprl.shared.commands", "qualname": "EndGame", "kind": "class", "doc": "

Command to notify the client that the game has ended

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.EndGame.arguments": {"fullname": "comprl.shared.commands.EndGame.arguments", "modulename": "comprl.shared.commands", "qualname": "EndGame.arguments", "kind": "variable", "doc": "

\n", "default_value": "[(b'result', <twisted.protocols.amp.Boolean object>), (b'stats', <twisted.protocols.amp.ListOf object>)]"}, "comprl.shared.commands.EndGame.response": {"fullname": "comprl.shared.commands.EndGame.response", "modulename": "comprl.shared.commands", "qualname": "EndGame.response", "kind": "variable", "doc": "

\n", "default_value": "[]"}, "comprl.shared.commands.EndGame.reverseErrors": {"fullname": "comprl.shared.commands.EndGame.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "EndGame.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.EndGame.allErrors": {"fullname": "comprl.shared.commands.EndGame.allErrors", "modulename": "comprl.shared.commands", "qualname": "EndGame.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.EndGame.commandName": {"fullname": "comprl.shared.commands.EndGame.commandName", "modulename": "comprl.shared.commands", "qualname": "EndGame.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'EndGame'"}, "comprl.shared.commands.Step": {"fullname": "comprl.shared.commands.Step", "modulename": "comprl.shared.commands", "qualname": "Step", "kind": "class", "doc": "

Command for requesting the next step from the agent

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.Step.arguments": {"fullname": "comprl.shared.commands.Step.arguments", "modulename": "comprl.shared.commands", "qualname": "Step.arguments", "kind": "variable", "doc": "

\n", "default_value": "[(b'obv', <twisted.protocols.amp.ListOf object>)]"}, "comprl.shared.commands.Step.response": {"fullname": "comprl.shared.commands.Step.response", "modulename": "comprl.shared.commands", "qualname": "Step.response", "kind": "variable", "doc": "

\n", "default_value": "[(b'action', <twisted.protocols.amp.ListOf object>)]"}, "comprl.shared.commands.Step.reverseErrors": {"fullname": "comprl.shared.commands.Step.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "Step.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Step.allErrors": {"fullname": "comprl.shared.commands.Step.allErrors", "modulename": "comprl.shared.commands", "qualname": "Step.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Step.commandName": {"fullname": "comprl.shared.commands.Step.commandName", "modulename": "comprl.shared.commands", "qualname": "Step.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'Step'"}, "comprl.shared.commands.Error": {"fullname": "comprl.shared.commands.Error", "modulename": "comprl.shared.commands", "qualname": "Error", "kind": "class", "doc": "

Command interface for a generic error message

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.Error.arguments": {"fullname": "comprl.shared.commands.Error.arguments", "modulename": "comprl.shared.commands", "qualname": "Error.arguments", "kind": "variable", "doc": "

\n", "default_value": "[(b'msg', <twisted.protocols.amp.String object>)]"}, "comprl.shared.commands.Error.response": {"fullname": "comprl.shared.commands.Error.response", "modulename": "comprl.shared.commands", "qualname": "Error.response", "kind": "variable", "doc": "

\n", "default_value": "[]"}, "comprl.shared.commands.Error.reverseErrors": {"fullname": "comprl.shared.commands.Error.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "Error.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Error.allErrors": {"fullname": "comprl.shared.commands.Error.allErrors", "modulename": "comprl.shared.commands", "qualname": "Error.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Error.commandName": {"fullname": "comprl.shared.commands.Error.commandName", "modulename": "comprl.shared.commands", "qualname": "Error.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'Error'"}, "comprl.shared.commands.Message": {"fullname": "comprl.shared.commands.Message", "modulename": "comprl.shared.commands", "qualname": "Message", "kind": "class", "doc": "

Command interface for a generic message

\n", "bases": "twisted.protocols.amp.Command"}, "comprl.shared.commands.Message.arguments": {"fullname": "comprl.shared.commands.Message.arguments", "modulename": "comprl.shared.commands", "qualname": "Message.arguments", "kind": "variable", "doc": "

\n", "default_value": "[(b'msg', <twisted.protocols.amp.String object>)]"}, "comprl.shared.commands.Message.response": {"fullname": "comprl.shared.commands.Message.response", "modulename": "comprl.shared.commands", "qualname": "Message.response", "kind": "variable", "doc": "

\n", "default_value": "[]"}, "comprl.shared.commands.Message.reverseErrors": {"fullname": "comprl.shared.commands.Message.reverseErrors", "modulename": "comprl.shared.commands", "qualname": "Message.reverseErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Message.allErrors": {"fullname": "comprl.shared.commands.Message.allErrors", "modulename": "comprl.shared.commands", "qualname": "Message.allErrors", "kind": "variable", "doc": "

\n", "default_value": "{}"}, "comprl.shared.commands.Message.commandName": {"fullname": "comprl.shared.commands.Message.commandName", "modulename": "comprl.shared.commands", "qualname": "Message.commandName", "kind": "variable", "doc": "

\n", "default_value": "b'Message'"}, "comprl.shared.types": {"fullname": "comprl.shared.types", "modulename": "comprl.shared.types", "kind": "module", "doc": "

contains types used by the server and the client

\n"}, "comprl.shared.types.PlayerID": {"fullname": "comprl.shared.types.PlayerID", "modulename": "comprl.shared.types", "qualname": "PlayerID", "kind": "variable", "doc": "

\n", "annotation": ": TypeAlias", "default_value": "uuid.UUID"}, "comprl.shared.types.GameID": {"fullname": "comprl.shared.types.GameID", "modulename": "comprl.shared.types", "qualname": "GameID", "kind": "variable", "doc": "

\n", "annotation": ": TypeAlias", "default_value": "uuid.UUID"}}, "docInfo": {"comprl": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.client": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 13}, "comprl.client.agent": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "comprl.client.agent.Agent": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 38}, "comprl.client.agent.Agent.event": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 38}, "comprl.client.agent.Agent.run": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 83}, "comprl.client.agent.Agent.on_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 12}, "comprl.client.agent.Agent.on_message": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 12}, "comprl.client.agent.Agent.on_disconnect": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 11}, "comprl.client.interfaces": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "comprl.client.interfaces.IAgent": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 12}, "comprl.client.interfaces.IAgent.run": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 22}, "comprl.client.interfaces.IAgent.auth": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 15}, "comprl.client.interfaces.IAgent.is_ready": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 26}, "comprl.client.interfaces.IAgent.on_start_game": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 38}, "comprl.client.interfaces.IAgent.get_step": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 32}, "comprl.client.interfaces.IAgent.on_end_game": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 40, "bases": 0, "doc": 41}, "comprl.client.interfaces.IAgent.on_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 18}, "comprl.client.interfaces.IAgent.on_message": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 20}, "comprl.client.interfaces.IAgent.on_disconnect": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 11}, "comprl.client.networking": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 13}, "comprl.client.networking.VERSION": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.client.networking.ClientProtocol": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 22}, "comprl.client.networking.ClientProtocol.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 52, "bases": 0, "doc": 40}, "comprl.client.networking.ClientProtocol.agent": {"qualname": 2, "fullname": 5, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.client.networking.ClientProtocol.connectionMade": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 12}, "comprl.client.networking.ClientProtocol.connectionLost": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 25}, "comprl.client.networking.ClientProtocol.auth": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 27}, "comprl.client.networking.ClientProtocol.ready": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 32}, "comprl.client.networking.ClientProtocol.start_game": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 44}, "comprl.client.networking.ClientProtocol.end_game": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 52}, "comprl.client.networking.ClientProtocol.step": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 45}, "comprl.client.networking.ClientProtocol.on_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 22}, "comprl.client.networking.ClientProtocol.on_message": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 21}, "comprl.client.networking.connect_agent": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 72, "bases": 0, "doc": 83}, "comprl.server": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces": {"qualname": 0, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 12}, "comprl.server.data.interfaces.GameEndState": {"qualname": 1, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 37}, "comprl.server.data.interfaces.GameEndState.WIN": {"qualname": 2, "fullname": 6, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameEndState.DRAW": {"qualname": 2, "fullname": 6, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"qualname": 2, "fullname": 6, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult": {"qualname": 1, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "comprl.server.data.interfaces.GameResult.__init__": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 180, "bases": 0, "doc": 112}, "comprl.server.data.interfaces.GameResult.game_id": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.user1_id": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.user2_id": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.score_user_1": {"qualname": 4, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.score_user_2": {"qualname": 4, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.start_time": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.end_state": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.winner_id": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"qualname": 3, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.UserRole": {"qualname": 1, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 23}, "comprl.server.data.interfaces.UserRole.USER": {"qualname": 2, "fullname": 6, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.interfaces.UserRole.ADMIN": {"qualname": 2, "fullname": 6, "annotation": 0, "default_value": 9, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend": {"qualname": 0, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 17}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"qualname": 1, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 32}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"qualname": 3, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"qualname": 2, "fullname": 7, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"qualname": 2, "fullname": 7, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.GameData": {"qualname": 1, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 40}, "comprl.server.data.sql_backend.GameData.__init__": {"qualname": 3, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.GameData.connection": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.GameData.cursor": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.GameData.table": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.GameData.add": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 45, "bases": 0, "doc": 24}, "comprl.server.data.sql_backend.GameData.remove": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 29}, "comprl.server.data.sql_backend.UserData": {"qualname": 1, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 40}, "comprl.server.data.sql_backend.UserData.__init__": {"qualname": 3, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 23}, "comprl.server.data.sql_backend.UserData.connection": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.UserData.cursor": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.UserData.table": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.data.sql_backend.UserData.add": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 108, "bases": 0, "doc": 96}, "comprl.server.data.sql_backend.UserData.remove": {"qualname": 2, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 29}, "comprl.server.data.sql_backend.UserData.is_verified": {"qualname": 3, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 39}, "comprl.server.data.sql_backend.UserData.get_user_id": {"qualname": 4, "fullname": 9, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 44}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"qualname": 4, "fullname": 9, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 41}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"qualname": 4, "fullname": 9, "annotation": 0, "default_value": 0, "signature": 45, "bases": 0, "doc": 47}, "comprl.server.interfaces": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 13}, "comprl.server.interfaces.IAction": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 6}, "comprl.server.interfaces.IPlayer": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 6}, "comprl.server.interfaces.IPlayer.id": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IPlayer.user_id": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IPlayer.is_connected": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IPlayer.authenticate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 12}, "comprl.server.interfaces.IPlayer.is_ready": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 23}, "comprl.server.interfaces.IPlayer.notify_start": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 9}, "comprl.server.interfaces.IPlayer.get_action": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 40, "bases": 0, "doc": 25}, "comprl.server.interfaces.IPlayer.notify_end": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 9}, "comprl.server.interfaces.IPlayer.disconnect": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 5}, "comprl.server.interfaces.IPlayer.notify_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 8}, "comprl.server.interfaces.IPlayer.notify_info": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 8}, "comprl.server.interfaces.IGame": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 60}, "comprl.server.interfaces.IGame.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 26}, "comprl.server.interfaces.IGame.id": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.players": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.finish_callbacks": {"qualname": 3, "fullname": 6, "annotation": 7, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.scores": {"qualname": 2, "fullname": 5, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.start_time": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.disconnected_player_id": {"qualname": 4, "fullname": 7, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.game_info": {"qualname": 3, "fullname": 6, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.all_actions": {"qualname": 3, "fullname": 6, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.interfaces.IGame.add_finish_callback": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 53, "bases": 0, "doc": 30}, "comprl.server.interfaces.IGame.start": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 16}, "comprl.server.interfaces.IGame.force_end": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 32}, "comprl.server.interfaces.IGame.get_result": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 40, "bases": 0, "doc": 19}, "comprl.server.interfaces.IServer": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 21}, "comprl.server.interfaces.IServer.on_start": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 9}, "comprl.server.interfaces.IServer.on_stop": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 9}, "comprl.server.interfaces.IServer.on_connect": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 18}, "comprl.server.interfaces.IServer.on_disconnect": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 18}, "comprl.server.interfaces.IServer.on_timeout": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 46, "bases": 0, "doc": 21}, "comprl.server.interfaces.IServer.on_remote_error": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 26}, "comprl.server.interfaces.IServer.on_update": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 15}, "comprl.server.managers": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 13}, "comprl.server.managers.GameManager": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 40}, "comprl.server.managers.GameManager.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 3}, "comprl.server.managers.GameManager.games": {"qualname": 2, "fullname": 5, "annotation": 7, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.GameManager.game_type": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.GameManager.start_game": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 39}, "comprl.server.managers.GameManager.end_game": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 27}, "comprl.server.managers.GameManager.force_game_end": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 25}, "comprl.server.managers.GameManager.get": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 39}, "comprl.server.managers.GameManager.get_stored_actions": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 37}, "comprl.server.managers.PlayerManager": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 6}, "comprl.server.managers.PlayerManager.auth_players": {"qualname": 3, "fullname": 6, "annotation": 8, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.PlayerManager.connected_players": {"qualname": 3, "fullname": 6, "annotation": 7, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.PlayerManager.add": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 26}, "comprl.server.managers.PlayerManager.auth": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 40, "bases": 0, "doc": 44}, "comprl.server.managers.PlayerManager.remove": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 26}, "comprl.server.managers.PlayerManager.get_user_id": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 36}, "comprl.server.managers.PlayerManager.get_player_by_id": {"qualname": 5, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 43}, "comprl.server.managers.PlayerManager.broadcast_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 26}, "comprl.server.managers.PlayerManager.disconnect_all": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 22}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 41}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 47, "bases": 0, "doc": 49}, "comprl.server.managers.QueuePlayer": {"qualname": 1, "fullname": 4, "annotation": 2, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.MatchmakingManager": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 10}, "comprl.server.managers.MatchmakingManager.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 58, "bases": 0, "doc": 27}, "comprl.server.managers.MatchmakingManager.player_manager": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.MatchmakingManager.game_manager": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.MatchmakingManager.model": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.managers.MatchmakingManager.try_match": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 36}, "comprl.server.managers.MatchmakingManager.match": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 24}, "comprl.server.managers.MatchmakingManager.remove": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 26}, "comprl.server.networking": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 9}, "comprl.server.networking.VERSION": {"qualname": 1, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPServerProtocol": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 74}, "comprl.server.networking.COMPServerProtocol.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 3}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"qualname": 4, "fullname": 7, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"qualname": 4, "fullname": 7, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"qualname": 4, "fullname": 7, "annotation": 7, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"qualname": 4, "fullname": 7, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"qualname": 5, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 30}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"qualname": 5, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 30}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"qualname": 5, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 30}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"qualname": 5, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 33, "bases": 0, "doc": 32}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 16}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 27}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 28}, "comprl.server.networking.COMPServerProtocol.connection_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 26}, "comprl.server.networking.COMPServerProtocol.get_token": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 39}, "comprl.server.networking.COMPServerProtocol.is_ready": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 44}, "comprl.server.networking.COMPServerProtocol.notify_start": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 27}, "comprl.server.networking.COMPServerProtocol.get_step": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 56, "bases": 0, "doc": 48}, "comprl.server.networking.COMPServerProtocol.notify_end": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 33}, "comprl.server.networking.COMPServerProtocol.send_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 26}, "comprl.server.networking.COMPServerProtocol.send_message": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 25}, "comprl.server.networking.COMPServerProtocol.disconnect": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 13}, "comprl.server.networking.COMPPlayer": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 23}, "comprl.server.networking.COMPPlayer.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 20}, "comprl.server.networking.COMPPlayer.connection": {"qualname": 2, "fullname": 5, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPPlayer.is_connected": {"qualname": 3, "fullname": 6, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPPlayer.authenticate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 32}, "comprl.server.networking.COMPPlayer.is_ready": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 41}, "comprl.server.networking.COMPPlayer.notify_start": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 25}, "comprl.server.networking.COMPPlayer.get_action": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 29}, "comprl.server.networking.COMPPlayer.notify_end": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 28}, "comprl.server.networking.COMPPlayer.disconnect": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 18}, "comprl.server.networking.COMPPlayer.notify_error": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 19}, "comprl.server.networking.COMPPlayer.notify_info": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 19}, "comprl.server.networking.COMPFactory": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 51}, "comprl.server.networking.COMPFactory.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 3}, "comprl.server.networking.COMPFactory.server": {"qualname": 2, "fullname": 5, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.server.networking.COMPFactory.startFactory": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 7}, "comprl.server.networking.COMPFactory.stopFactory": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 7}, "comprl.server.networking.COMPFactory.buildProtocol": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 73, "bases": 0, "doc": 35}, "comprl.server.networking.launch_server": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 32}, "comprl.server.util": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "comprl.server.util.IDGenerator": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "comprl.server.util.IDGenerator.generate_player_id": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 15, "bases": 0, "doc": 14}, "comprl.server.util.IDGenerator.generate_game_id": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 15, "bases": 0, "doc": 14}, "comprl.server.util.ConfigProvider": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 5}, "comprl.server.util.ConfigProvider.get": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 24}, "comprl.server.util.ConfigProvider.set": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 23}, "comprl.shared": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 12}, "comprl.shared.commands.Auth": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 45}, "comprl.shared.commands.Auth.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Auth.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 24, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Auth.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Auth.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Auth.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Ready": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 14}, "comprl.shared.commands.Ready.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Ready.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 13, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Ready.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Ready.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Ready.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.StartGame": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 11}, "comprl.shared.commands.StartGame.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 14, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.StartGame.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.StartGame.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.StartGame.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.StartGame.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.EndGame": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 12}, "comprl.shared.commands.EndGame.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 24, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.EndGame.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.EndGame.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.EndGame.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.EndGame.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Step": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 11}, "comprl.shared.commands.Step.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 13, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Step.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 13, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Step.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Step.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Step.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Error": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 9}, "comprl.shared.commands.Error.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 13, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Error.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Error.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Error.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Error.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Message": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 8}, "comprl.shared.commands.Message.arguments": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 13, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Message.response": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Message.reverseErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Message.allErrors": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.commands.Message.commandName": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.types": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "comprl.shared.types.PlayerID": {"qualname": 1, "fullname": 4, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "comprl.shared.types.GameID": {"qualname": 1, "fullname": 4, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}}, "length": 243, "save": true}, "index": {"qualname": {"root": {"1": {"docs": {"comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}}, "df": 1}, "2": {"docs": {"comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}}, "df": 1}, "docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}}, "df": 11, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 8}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Auth.commandName": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}}, "df": 2}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}}, "df": 1}}}, "d": {"docs": {"comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 8}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 2}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}}, "df": 7}}}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 7}}}}}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}}, "df": 17}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 9, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}}, "df": 6}}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}}, "df": 11}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 4}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}}, "df": 7}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}}, "df": 7}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 17}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 10}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}}, "df": 2, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 4, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.model": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 8}}}}}}}}}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}}, "df": 2}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.managers.MatchmakingManager.model": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}}, "df": 3}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}}, "df": 10}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IAction": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 8}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}}, "df": 11}}, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 3}}}, "d": {"docs": {"comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 14, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 3}}}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}}, "df": 12}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 14}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}}, "df": 10, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory.startFactory": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}}, "df": 6}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}}, "df": 9}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"comprl.server.interfaces.IServer.on_stop": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.server.interfaces.IGame.scores": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}}, "df": 4}}}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}}, "df": 2}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPFactory.server": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 2}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 12, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}}, "df": 4}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}}, "df": 11}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}}, "df": 7}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 9}}}}}}}, "s": {"docs": {"comprl.server.managers.GameManager.games": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.types.GameID": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}}, "df": 14}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 2}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.VERSION": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}}, "df": 12}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}}, "df": 12, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}}, "df": 3}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.util.ConfigProvider": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}}, "df": 22}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 12}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 6}}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 7}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 5, "s": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}}, "df": 5}}}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"1": {"docs": {"comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}}, "df": 1}, "2": {"docs": {"comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}}, "df": 1}, "docs": {"comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}}, "df": 6, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}}, "df": 3}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}}, "df": 11}}}}}}}, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}}, "df": 3}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager.game_type": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 4}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}}, "df": 4, "s": {"docs": {"comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}}, "df": 3}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 12}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.types.PlayerID": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 10}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}}, "df": 2}}}}}, "b": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1}}, "df": 1}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.networking.launch_server": {"tf": 1}}, "df": 1}}}}}}}}, "fullname": {"root": {"1": {"docs": {"comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}}, "df": 1}, "2": {"docs": {"comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}}, "df": 1}, "docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}}, "df": 11, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"comprl": {"tf": 1}, "comprl.client": {"tf": 1}, "comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking": {"tf": 1}, "comprl.client.networking.VERSION": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server": {"tf": 1}, "comprl.server.data": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.QueuePlayer": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.model": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}, "comprl.server.util": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}, "comprl.server.util.ConfigProvider": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}, "comprl.shared": {"tf": 1}, "comprl.shared.commands": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}, "comprl.shared.types": {"tf": 1}, "comprl.shared.types.PlayerID": {"tf": 1}, "comprl.shared.types.GameID": {"tf": 1}}, "df": 243}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}}, "df": 22}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 12}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 6}}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 43}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 7}}}}}}}}}, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}}, "df": 12, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}}, "df": 3}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.util.ConfigProvider": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 3}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client": {"tf": 1}, "comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking": {"tf": 1}, "comprl.client.networking.VERSION": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 34, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}}, "df": 12}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 5, "s": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}}, "df": 5}}}}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.event": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.on_error": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.on_message": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 9}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Auth.commandName": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}}, "df": 2}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}}, "df": 1}}}, "d": {"docs": {"comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 8}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 2}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}}, "df": 7}}}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 7}}}}}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}}, "df": 17}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 9, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}}, "df": 6}}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}}, "df": 11}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 4}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}}, "df": 7}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}}, "df": 7}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 17}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 10}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}}, "df": 2, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 4, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.model": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 8}}}}}}}}}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.QueuePlayer": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.model": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 31}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.managers.MatchmakingManager.model": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}}, "df": 3}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}}, "df": 43}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.interfaces": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 66}}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}}, "df": 11}}, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 3}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}}, "df": 10}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IAction": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 8}}}}}}, "d": {"docs": {"comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 14, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 3}}}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}}, "df": 12}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 14}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}}, "df": 10, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory.startFactory": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}}, "df": 6}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}}, "df": 9}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"comprl.server.interfaces.IServer.on_stop": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server": {"tf": 1}, "comprl.server.data": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.QueuePlayer": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.model": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1.4142135623730951}, "comprl.server.util": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}, "comprl.server.util.ConfigProvider": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 161}}}}, "t": {"docs": {"comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}}, "df": 2}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.server.interfaces.IGame.scores": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}}, "df": 23, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}}, "df": 4}}}}}}}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared": {"tf": 1}, "comprl.shared.commands": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}, "comprl.shared.commands.Message.response": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}, "comprl.shared.types": {"tf": 1}, "comprl.shared.types.PlayerID": {"tf": 1}, "comprl.shared.types.GameID": {"tf": 1}}, "df": 47}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 12, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}}, "df": 4}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1}}, "df": 11}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}}, "df": 7}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.GameManager.game_type": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 9}}}}}}}, "s": {"docs": {"comprl.server.managers.GameManager.games": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.types.GameID": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}}, "df": 14}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 2}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.networking": {"tf": 1}, "comprl.client.networking.VERSION": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 58}}}}}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 10}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.VERSION": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}}, "df": 1}}}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"1": {"docs": {"comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1}}, "df": 1}, "2": {"docs": {"comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1}}, "df": 1}, "docs": {"comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}}, "df": 6, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}}, "df": 3}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}}, "df": 11}}}}}}}, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.util": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}, "comprl.server.util.ConfigProvider": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 7}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.start_time": {"tf": 1}, "comprl.server.interfaces.IGame.start_time": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}}, "df": 3}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager.game_type": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.shared.types": {"tf": 1}, "comprl.shared.types.PlayerID": {"tf": 1}, "comprl.shared.types.GameID": {"tf": 1}}, "df": 3}}}}, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}}, "df": 23}}}}}}, "y": {"docs": {"comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 4}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}}, "df": 4, "s": {"docs": {"comprl.server.interfaces.IGame.players": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}}, "df": 3}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 12}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.types.PlayerID": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}}, "df": 2}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1}}, "df": 1}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.networking.launch_server": {"tf": 1}}, "df": 1}}}}}}}}, "annotation": {"root": {"docs": {"comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}, "comprl.server.interfaces.IPlayer.id": {"tf": 1}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1}, "comprl.server.interfaces.IGame.id": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.managers.QueuePlayer": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}, "comprl.shared.types.PlayerID": {"tf": 1}, "comprl.shared.types.GameID": {"tf": 1}}, "df": 25, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}}, "df": 5}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPPlayer.connection": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.agent": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}}, "df": 2, "[": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.networking.ClientProtocol.agent": {"tf": 1}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}}, "df": 6}}}}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.agent": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}}, "df": 2}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPFactory.server": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1}, "comprl.server.networking.COMPFactory.server": {"tf": 1}}, "df": 6}}}}}}, "u": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IPlayer.id": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.id": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}}, "df": 7}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IPlayer.user_id": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}}, "df": 5}}}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}}, "df": 2}}}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}}, "df": 5}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.interfaces.IGame.game_info": {"tf": 1}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1}}, "df": 2}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPPlayer.connection": {"tf": 1}}, "df": 1}}}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IGame.scores": {"tf": 1}, "comprl.server.managers.GameManager.games": {"tf": 1}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1}}, "df": 4}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.game_info": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IGame.scores": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.managers.PlayerManager.auth_players": {"tf": 1}}, "df": 1}}}}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1}, "comprl.shared.types.PlayerID": {"tf": 1}, "comprl.shared.types.GameID": {"tf": 1}}, "df": 3}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1}}, "df": 2}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPPlayer.is_connected": {"tf": 1}}, "df": 1}}}}}}, "default_value": {"root": {"0": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}}, "df": 1}, "1": {"docs": {"comprl.client.networking.VERSION": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.networking.VERSION": {"tf": 1}}, "df": 3}, "2": {"docs": {"comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}}, "df": 1}, "docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth.arguments": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1}, "comprl.shared.commands.Auth.allErrors": {"tf": 1}, "comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready.arguments": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1}, "comprl.shared.commands.Ready.allErrors": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame.response": {"tf": 1}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.EndGame.response": {"tf": 1}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1}, "comprl.shared.commands.Step.allErrors": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Error.response": {"tf": 1}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1}, "comprl.shared.commands.Error.allErrors": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Message.response": {"tf": 1}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1}, "comprl.shared.commands.Message.allErrors": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 40, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 13}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {"comprl.shared.commands.EndGame.arguments": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}}, "df": 3}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.StartGame.arguments": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}}, "df": 3}}}}}}}}}}}, "t": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}, "comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 13}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1}}, "df": 1}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.interfaces.UserRole.USER": {"tf": 1.4142135623730951}}, "df": 1, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.UserRole.USER": {"tf": 1}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1}}, "df": 2}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1}, "comprl.shared.types.PlayerID": {"tf": 1.4142135623730951}, "comprl.shared.types.GameID": {"tf": 1.4142135623730951}}, "df": 3}}}}, "x": {"2": {"7": {"docs": {"comprl.server.data.interfaces.UserRole.USER": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth.response": {"tf": 2}, "comprl.shared.commands.Auth.commandName": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.commandName": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame.commandName": {"tf": 1.4142135623730951}, "comprl.shared.commands.EndGame.arguments": {"tf": 2}, "comprl.shared.commands.EndGame.commandName": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.commandName": {"tf": 1.4142135623730951}, "comprl.shared.commands.Error.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Error.commandName": {"tf": 1.4142135623730951}, "comprl.shared.commands.Message.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Message.commandName": {"tf": 1.4142135623730951}}, "df": 17}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1.4142135623730951}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 8}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"comprl.shared.commands.Auth.commandName": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.shared.commands.Step.response": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 8}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {"comprl.shared.commands.StartGame.arguments": {"tf": 1}}, "df": 1}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.QueuePlayer": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "b": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth.commandName": {"tf": 1}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.StartGame.commandName": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.EndGame.commandName": {"tf": 1}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Step.commandName": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Error.commandName": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}, "comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 15, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 8}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 4}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.StartGame.commandName": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.EndGame.arguments": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {"comprl.shared.commands.Step.commandName": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.StartGame.arguments": {"tf": 1}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1}, "comprl.shared.commands.Step.response": {"tf": 1}, "comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 8}}}}, "v": {"docs": {"comprl.shared.commands.Step.arguments": {"tf": 1}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.shared.commands.Auth.response": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"comprl.shared.commands.Ready.response": {"tf": 1}, "comprl.shared.commands.Ready.commandName": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.shared.commands.EndGame.arguments": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.EndGame.commandName": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.shared.commands.Error.commandName": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "g": {"docs": {"comprl.shared.commands.Error.arguments": {"tf": 1}, "comprl.shared.commands.Message.arguments": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"comprl.shared.commands.Message.commandName": {"tf": 1}}, "df": 1}}}}}}}}}, "signature": {"root": {"0": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 2}, "1": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}, "2": {"5": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}, "docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}, "3": {"3": {"3": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "9": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}}, "df": 3}, "docs": {}, "df": 0}, "6": {"5": {"3": {"3": {"5": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "8": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}, "docs": {"comprl.client.agent.Agent.event": {"tf": 3.7416573867739413}, "comprl.client.agent.Agent.run": {"tf": 7.0710678118654755}, "comprl.client.agent.Agent.on_error": {"tf": 4.242640687119285}, "comprl.client.agent.Agent.on_message": {"tf": 4.242640687119285}, "comprl.client.agent.Agent.on_disconnect": {"tf": 3.1622776601683795}, "comprl.client.interfaces.IAgent.run": {"tf": 4.242640687119285}, "comprl.client.interfaces.IAgent.auth": {"tf": 3.4641016151377544}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 3.4641016151377544}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 4.47213595499958}, "comprl.client.interfaces.IAgent.get_step": {"tf": 5.477225575051661}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 5.744562646538029}, "comprl.client.interfaces.IAgent.on_error": {"tf": 4.242640687119285}, "comprl.client.interfaces.IAgent.on_message": {"tf": 4.242640687119285}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 3.1622776601683795}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 6.557438524302}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 3.1622776601683795}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 3.7416573867739413}, "comprl.client.networking.ClientProtocol.auth": {"tf": 3.1622776601683795}, "comprl.client.networking.ClientProtocol.ready": {"tf": 3.1622776601683795}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 4.242640687119285}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 4.242640687119285}, "comprl.client.networking.ClientProtocol.step": {"tf": 4.795831523312719}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 3.7416573867739413}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 3.7416573867739413}, "comprl.client.networking.connect_agent": {"tf": 7.681145747868608}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 11.704699910719626}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 4.47213595499958}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 5.291502622129181}, "comprl.server.data.sql_backend.GameData.add": {"tf": 6}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 4.898979485566356}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 5.291502622129181}, "comprl.server.data.sql_backend.UserData.add": {"tf": 8.94427190999916}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 4.47213595499958}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 4.47213595499958}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 5}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 5.477225575051661}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 6}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 3.7416573867739413}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 4}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 3.7416573867739413}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 5.656854249492381}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 4.242640687119285}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 4.242640687119285}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 4.242640687119285}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 4.242640687119285}, "comprl.server.interfaces.IGame.__init__": {"tf": 5.385164807134504}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 6.6332495807108}, "comprl.server.interfaces.IGame.start": {"tf": 3.1622776601683795}, "comprl.server.interfaces.IGame.force_end": {"tf": 4.69041575982343}, "comprl.server.interfaces.IGame.get_result": {"tf": 5.744562646538029}, "comprl.server.interfaces.IServer.on_start": {"tf": 3.1622776601683795}, "comprl.server.interfaces.IServer.on_stop": {"tf": 3.1622776601683795}, "comprl.server.interfaces.IServer.on_connect": {"tf": 5.477225575051661}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 5.477225575051661}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 6.164414002968976}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 5.830951894845301}, "comprl.server.interfaces.IServer.on_update": {"tf": 3.1622776601683795}, "comprl.server.managers.GameManager.__init__": {"tf": 5.385164807134504}, "comprl.server.managers.GameManager.start_game": {"tf": 7.14142842854285}, "comprl.server.managers.GameManager.end_game": {"tf": 5.656854249492381}, "comprl.server.managers.GameManager.force_game_end": {"tf": 4.69041575982343}, "comprl.server.managers.GameManager.get": {"tf": 6.4031242374328485}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 6.4031242374328485}, "comprl.server.managers.PlayerManager.add": {"tf": 5.656854249492381}, "comprl.server.managers.PlayerManager.auth": {"tf": 5.656854249492381}, "comprl.server.managers.PlayerManager.remove": {"tf": 5.656854249492381}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 5.385164807134504}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 6.4031242374328485}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 4.47213595499958}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 4.47213595499958}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 5.477225575051661}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 6}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 6.782329983125268}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 4.898979485566356}, "comprl.server.managers.MatchmakingManager.match": {"tf": 4.898979485566356}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 4.898979485566356}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 4.47213595499958}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 5}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 5}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 5.744562646538029}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 5.291502622129181}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 3.4641016151377544}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 3.7416573867739413}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 4.47213595499958}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 4}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 5.477225575051661}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 5.477225575051661}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 4.898979485566356}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 6.782329983125268}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 4.47213595499958}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 4.242640687119285}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 4.242640687119285}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 3.1622776601683795}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 4.898979485566356}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 3.7416573867739413}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 4}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 4.69041575982343}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 4.242640687119285}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 4.242640687119285}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 4.242640687119285}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 4.242640687119285}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 4.242640687119285}, "comprl.server.networking.COMPFactory.__init__": {"tf": 4.898979485566356}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 3.4641016151377544}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 3.4641016151377544}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 7.681145747868608}, "comprl.server.networking.launch_server": {"tf": 6.48074069840786}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 3.605551275463989}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 3.605551275463989}, "comprl.server.util.ConfigProvider.get": {"tf": 3.1622776601683795}, "comprl.server.util.ConfigProvider.set": {"tf": 3.7416573867739413}}, "df": 111, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 94}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.launch_server": {"tf": 1.4142135623730951}}, "df": 23}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 25}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 5}, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 3}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 9}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 2}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}}, "df": 6}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}}, "df": 2}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1}}, "df": 3}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1.4142135623730951}}, "df": 7}}}, "t": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 3}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 3}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 15, "s": {"docs": {"comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}}, "df": 2}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 14, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 22}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1}}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "d": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}}, "df": 22}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IPlayer.get_action": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 2}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 9}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}}, "df": 5}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 36, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 8}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {"comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.4142135623730951}}, "df": 1}, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 11}}, "u": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 3}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 8}}, "x": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}}, "df": 2}}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}}, "df": 13, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 2}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 3}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "v": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 5}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 12}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}}, "df": 5}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 3}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 25}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 3}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 14}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 8}}}}}}}}, "u": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.get": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.auth": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1.4142135623730951}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1.4142135623730951}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1.4142135623730951}}, "df": 16}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"1": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.7320508075688772}}, "df": 1}, "2": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}, "docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 2.8284271247461903}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 9, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}}, "df": 4}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 5}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 2}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 1}}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 7}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPPlayer": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 10}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 9}}}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 9}}, "b": {"docs": {}, "df": 0, "c": {"docs": {"comprl.server.interfaces.IPlayer": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame": {"tf": 1.4142135623730951}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1.4142135623730951}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPPlayer": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "doc": {"root": {"1": {"docs": {"comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}}, "df": 4}, "2": {"5": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}, "docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}, "3": {"3": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "6": {"5": {"3": {"3": {"5": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "8": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}}, "df": 1}, "docs": {"comprl": {"tf": 1.7320508075688772}, "comprl.client": {"tf": 1.7320508075688772}, "comprl.client.agent": {"tf": 1.7320508075688772}, "comprl.client.agent.Agent": {"tf": 2.449489742783178}, "comprl.client.agent.Agent.event": {"tf": 3.1622776601683795}, "comprl.client.agent.Agent.run": {"tf": 4}, "comprl.client.agent.Agent.on_error": {"tf": 1.7320508075688772}, "comprl.client.agent.Agent.on_message": {"tf": 1.7320508075688772}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1.7320508075688772}, "comprl.client.interfaces": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.run": {"tf": 2.6457513110645907}, "comprl.client.interfaces.IAgent.auth": {"tf": 2.449489742783178}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 2.449489742783178}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 3.1622776601683795}, "comprl.client.interfaces.IAgent.get_step": {"tf": 3.1622776601683795}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 3}, "comprl.client.interfaces.IAgent.on_error": {"tf": 2.6457513110645907}, "comprl.client.interfaces.IAgent.on_message": {"tf": 2.449489742783178}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1.7320508075688772}, "comprl.client.networking": {"tf": 1.7320508075688772}, "comprl.client.networking.VERSION": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol": {"tf": 2.449489742783178}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 3}, "comprl.client.networking.ClientProtocol.agent": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 2.6457513110645907}, "comprl.client.networking.ClientProtocol.auth": {"tf": 2.8284271247461903}, "comprl.client.networking.ClientProtocol.ready": {"tf": 2.6457513110645907}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 3.3166247903554}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 3.4641016151377544}, "comprl.client.networking.ClientProtocol.step": {"tf": 3.3166247903554}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 2.6457513110645907}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 2.6457513110645907}, "comprl.client.networking.connect_agent": {"tf": 4}, "comprl.server": {"tf": 1.7320508075688772}, "comprl.server.data": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameEndState": {"tf": 2.449489742783178}, "comprl.server.data.interfaces.GameEndState.WIN": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameEndState.DRAW": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameEndState.DISCONNECTED": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 3.7416573867739413}, "comprl.server.data.interfaces.GameResult.game_id": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.user1_id": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.user2_id": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.score_user_1": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.score_user_2": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.start_time": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.end_state": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.winner_id": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameResult.disconnected_id": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.UserRole": {"tf": 2.449489742783178}, "comprl.server.data.interfaces.UserRole.USER": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.UserRole.ADMIN": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 2.8284271247461903}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.__init__": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.host": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.SQLiteConnectionInfo.table": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData": {"tf": 2.8284271247461903}, "comprl.server.data.sql_backend.GameData.__init__": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.connection": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.cursor": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.table": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.add": {"tf": 2.6457513110645907}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 2.6457513110645907}, "comprl.server.data.sql_backend.UserData": {"tf": 2.8284271247461903}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 2.6457513110645907}, "comprl.server.data.sql_backend.UserData.connection": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.cursor": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.table": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.add": {"tf": 3.872983346207417}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 2.6457513110645907}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 3.1622776601683795}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 3.1622776601683795}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 3.1622776601683795}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 3}, "comprl.server.interfaces": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IAction": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.id": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IPlayer.user_id": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IPlayer.is_connected": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 2.23606797749979}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 2}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 2.8284271247461903}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame": {"tf": 3.3166247903554}, "comprl.server.interfaces.IGame.__init__": {"tf": 2.6457513110645907}, "comprl.server.interfaces.IGame.id": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.players": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.finish_callbacks": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.scores": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.start_time": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.disconnected_player_id": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.game_info": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.all_actions": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 2.8284271247461903}, "comprl.server.interfaces.IGame.start": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.force_end": {"tf": 2.6457513110645907}, "comprl.server.interfaces.IGame.get_result": {"tf": 2.449489742783178}, "comprl.server.interfaces.IServer": {"tf": 2.449489742783178}, "comprl.server.interfaces.IServer.on_start": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IServer.on_connect": {"tf": 2}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 2}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 2}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 2}, "comprl.server.interfaces.IServer.on_update": {"tf": 1.7320508075688772}, "comprl.server.managers": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager": {"tf": 2.8284271247461903}, "comprl.server.managers.GameManager.__init__": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.games": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.game_type": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.start_game": {"tf": 3.1622776601683795}, "comprl.server.managers.GameManager.end_game": {"tf": 2.6457513110645907}, "comprl.server.managers.GameManager.force_game_end": {"tf": 2.449489742783178}, "comprl.server.managers.GameManager.get": {"tf": 3.1622776601683795}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 2.23606797749979}, "comprl.server.managers.PlayerManager": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.auth_players": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.connected_players": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.add": {"tf": 3}, "comprl.server.managers.PlayerManager.auth": {"tf": 3.3166247903554}, "comprl.server.managers.PlayerManager.remove": {"tf": 3}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 3.1622776601683795}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 3.1622776601683795}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 3}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 3}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 3.1622776601683795}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 3}, "comprl.server.managers.QueuePlayer": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 2.8284271247461903}, "comprl.server.managers.MatchmakingManager.player_manager": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.game_manager": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.model": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 3}, "comprl.server.managers.MatchmakingManager.match": {"tf": 2.6457513110645907}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 2.6457513110645907}, "comprl.server.networking": {"tf": 1.4142135623730951}, "comprl.server.networking.VERSION": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol": {"tf": 3.605551275463989}, "comprl.server.networking.COMPServerProtocol.__init__": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.connection_made_callbacks": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.connection_lost_callbacks": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.connection_timeout_callbacks": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.connection_error_callbacks": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 2.23606797749979}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 2.23606797749979}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 2.449489742783178}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 3}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 3.1622776601683795}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 3.1622776601683795}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 3}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 3}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 2.23606797749979}, "comprl.server.networking.COMPPlayer": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPPlayer.connection": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.is_connected": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 3.3166247903554}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 3.1622776601683795}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 2.8284271247461903}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPFactory": {"tf": 3.1622776601683795}, "comprl.server.networking.COMPFactory.__init__": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.server": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 3.3166247903554}, "comprl.server.networking.launch_server": {"tf": 2.8284271247461903}, "comprl.server.util": {"tf": 1.7320508075688772}, "comprl.server.util.IDGenerator": {"tf": 1.4142135623730951}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 2}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 2}, "comprl.server.util.ConfigProvider": {"tf": 1.4142135623730951}, "comprl.server.util.ConfigProvider.get": {"tf": 2.6457513110645907}, "comprl.server.util.ConfigProvider.set": {"tf": 2.449489742783178}, "comprl.shared": {"tf": 1.7320508075688772}, "comprl.shared.commands": {"tf": 1.7320508075688772}, "comprl.shared.commands.Auth": {"tf": 3.1622776601683795}, "comprl.shared.commands.Auth.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.Auth.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.Auth.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Auth.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Auth.commandName": {"tf": 1.7320508075688772}, "comprl.shared.commands.Ready": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.Ready.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.Ready.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Ready.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Ready.commandName": {"tf": 1.7320508075688772}, "comprl.shared.commands.StartGame": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.StartGame.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.StartGame.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.StartGame.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.StartGame.commandName": {"tf": 1.7320508075688772}, "comprl.shared.commands.EndGame": {"tf": 1.4142135623730951}, "comprl.shared.commands.EndGame.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.EndGame.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.EndGame.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.EndGame.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.EndGame.commandName": {"tf": 1.7320508075688772}, "comprl.shared.commands.Step": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.Step.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.Step.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Step.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Step.commandName": {"tf": 1.7320508075688772}, "comprl.shared.commands.Error": {"tf": 1.4142135623730951}, "comprl.shared.commands.Error.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.Error.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.Error.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Error.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Error.commandName": {"tf": 1.7320508075688772}, "comprl.shared.commands.Message": {"tf": 1.4142135623730951}, "comprl.shared.commands.Message.arguments": {"tf": 1.7320508075688772}, "comprl.shared.commands.Message.response": {"tf": 1.7320508075688772}, "comprl.shared.commands.Message.reverseErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Message.allErrors": {"tf": 1.7320508075688772}, "comprl.shared.commands.Message.commandName": {"tf": 1.7320508075688772}, "comprl.shared.types": {"tf": 1.4142135623730951}, "comprl.shared.types.PlayerID": {"tf": 1.7320508075688772}, "comprl.shared.types.GameID": {"tf": 1.7320508075688772}}, "df": 243, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client": {"tf": 1}, "comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1.4142135623730951}, "comprl.server.util": {"tf": 1}}, "df": 14}}, "e": {"docs": {"comprl.client": {"tf": 1.4142135623730951}, "comprl.client.agent": {"tf": 1.7320508075688772}, "comprl.client.agent.Agent": {"tf": 2}, "comprl.client.agent.Agent.event": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.run": {"tf": 3.605551275463989}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1.4142135623730951}, "comprl.client.interfaces": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent.auth": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent.get_step": {"tf": 2}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 2.6457513110645907}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1.4142135623730951}, "comprl.client.networking": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 2}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 2.23606797749979}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 2}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 2.449489742783178}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 2}, "comprl.client.networking.ClientProtocol.step": {"tf": 2.23606797749979}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 3.605551275463989}, "comprl.server.data.interfaces": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameEndState": {"tf": 2}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2.8284271247461903}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 2.23606797749979}, "comprl.server.data.sql_backend.GameData": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 3.872983346207417}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 2.449489742783178}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 2.23606797749979}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 2.6457513110645907}, "comprl.server.interfaces": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 2.449489742783178}, "comprl.server.interfaces.IGame.__init__": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.start": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 2}, "comprl.server.interfaces.IGame.get_result": {"tf": 2}, "comprl.server.interfaces.IServer": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IServer.on_update": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 2}, "comprl.server.managers.GameManager.end_game": {"tf": 2}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 2.23606797749979}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 2}, "comprl.server.managers.PlayerManager.add": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.auth": {"tf": 2}, "comprl.server.managers.PlayerManager.remove": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 2}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 2}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 2.23606797749979}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 2.6457513110645907}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 2}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1.7320508075688772}, "comprl.server.networking": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol": {"tf": 2.449489742783178}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 2}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 2}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 2.23606797749979}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 2.449489742783178}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 2.6457513110645907}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 2}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 2}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 2.23606797749979}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 2.23606797749979}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 2.23606797749979}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPFactory": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 2.23606797749979}, "comprl.server.networking.launch_server": {"tf": 1.7320508075688772}, "comprl.server.util": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1.4142135623730951}, "comprl.server.util.ConfigProvider.set": {"tf": 1.4142135623730951}, "comprl.shared.commands": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth": {"tf": 2.449489742783178}, "comprl.shared.commands.Ready": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame": {"tf": 1.4142135623730951}, "comprl.shared.commands.EndGame": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step": {"tf": 1.4142135623730951}, "comprl.shared.types": {"tf": 1.4142135623730951}}, "df": 135, "i": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 8}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1.4142135623730951}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}}, "df": 20}}}, "o": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.event": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.run": {"tf": 2.23606797749979}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 2.23606797749979}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 2}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 2}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1.4142135623730951}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}}, "df": 55, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent.run": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent.auth": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.auth": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth": {"tf": 1.4142135623730951}}, "df": 12}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 11}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame": {"tf": 1.4142135623730951}}, "df": 2, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IServer.on_timeout": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 2}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1.4142135623730951}}, "df": 1}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}}, "df": 2}}}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager": {"tf": 1.7320508075688772}}, "df": 1, "[": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"comprl.shared.types": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client": {"tf": 1}, "comprl.client.agent": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.util": {"tf": 1}}, "df": 7}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 3}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 11}}}}}}, "s": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 8}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1.4142135623730951}}, "df": 3}}, "k": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}}, "df": 3}}}, "e": {"docs": {"comprl.server.managers": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.PlayerManager": {"tf": 1}}, "df": 2}, "d": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}}, "df": 1}, "r": {"docs": {"comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 2}}, "df": 3}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 7, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.MatchmakingManager.match": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.4142135623730951}}, "df": 5}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}}, "df": 13, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 3, "s": {"docs": {"comprl.client": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}}, "df": 4}}}}}}}}}, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 13, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1.4142135623730951}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 8, "s": {"docs": {"comprl.server.data.interfaces": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}}, "df": 2}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.shared.commands.Auth": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1.4142135623730951}}, "df": 5}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 8, "s": {"docs": {"comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.7320508075688772}}, "df": 2}}}}}}}, "t": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 4, "s": {"docs": {"comprl.server.data.sql_backend.GameData.remove": {"tf": 1}}, "df": 1}}, "f": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready": {"tf": 1}}, "df": 20}, "s": {"docs": {"comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}}, "df": 27, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 2}}}}}}, "d": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2.449489742783178}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.get": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.auth": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 2}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1.4142135623730951}, "comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1.4142135623730951}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1.4142135623730951}}, "df": 29, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}}, "df": 1}}}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 3}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IPlayer.get_action": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}}, "df": 7}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}}, "df": 4}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.networking": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.shared.commands": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 2}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.types": {"tf": 1}}, "df": 27}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 9, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.networking": {"tf": 1}, "comprl.server.managers": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1.4142135623730951}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.shared.commands": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 7, "s": {"docs": {"comprl.shared.commands": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.client.networking": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.util": {"tf": 1}, "comprl.shared.types": {"tf": 1}}, "df": 9}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}}, "df": 3}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1.4142135623730951}}, "df": 2}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol": {"tf": 2}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.4142135623730951}}, "df": 17, "s": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}}, "df": 4}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.util.ConfigProvider": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 3}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.interfaces.IAgent": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 30}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"comprl.server.interfaces.IPlayer.authenticate": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1.7320508075688772}}, "df": 13, "s": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol": {"tf": 2}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}}, "df": 3, "[": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 3}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.GameManager.force_game_end": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData": {"tf": 1.7320508075688772}}, "df": 2}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 4}}}}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame.start": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.util.IDGenerator": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"comprl.server.networking.launch_server": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 4}}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IServer": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.util.ConfigProvider": {"tf": 1}}, "df": 3}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.7320508075688772}}, "df": 5}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.7320508075688772}, "comprl.client.networking.connect_agent": {"tf": 1.7320508075688772}, "comprl.server.networking.launch_server": {"tf": 1.4142135623730951}}, "df": 3}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 3}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.4142135623730951}}, "df": 4, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.add": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.auth": {"tf": 2}, "comprl.server.managers.PlayerManager.remove": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 2.23606797749979}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 2}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 32, "s": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.__init__": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}}, "df": 11}, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}}, "df": 9}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.managers.GameManager.force_game_end": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.networking": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 2}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1.4142135623730951}, "comprl.server.util": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}, "comprl.shared.commands": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 39, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}}, "df": 2}, "d": {"docs": {"comprl.server.interfaces.IGame.force_end": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 4}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.event": {"tf": 2.23606797749979}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 12, "s": {"docs": {"comprl.client.networking": {"tf": 1}, "comprl.server.util": {"tf": 1}}, "df": 2}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}}, "df": 15}}, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 6}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}}, "df": 3}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.4142135623730951}}, "df": 6}}}}}, "s": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client": {"tf": 1}, "comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1.7320508075688772}, "comprl.client.agent.Agent.run": {"tf": 2}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 2}, "comprl.server.interfaces.IServer": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 2}, "comprl.server.util": {"tf": 1}, "comprl.shared.commands": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1.4142135623730951}, "comprl.shared.types": {"tf": 1}}, "df": 35, "s": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}}, "df": 3}, "d": {"docs": {"comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 2}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.util.ConfigProvider.get": {"tf": 1.7320508075688772}, "comprl.server.util.ConfigProvider.set": {"tf": 1.7320508075688772}}, "df": 2, "s": {"docs": {"comprl.server.util.ConfigProvider": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}}, "df": 5}}, "c": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 23, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPFactory.startFactory": {"tf": 1}, "comprl.shared.commands.Ready": {"tf": 1}}, "df": 7, "s": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}}, "df": 7}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.4142135623730951}}, "df": 5}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1.4142135623730951}}, "df": 4}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}}, "df": 4}}}}}}, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.shared.commands.Step": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"comprl.server.networking.COMPFactory.stopFactory": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.server.interfaces.IServer.on_stop": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 3}}, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.4142135623730951}}, "df": 5}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 2}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"3": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData": {"tf": 1.4142135623730951}}, "df": 2}, "docs": {"comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}}, "df": 5, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.managers.PlayerManager.auth": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol.step": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 2}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IGame.__init__": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.start_game": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}, "comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 65, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.shared.commands.Step": {"tf": 1}}, "df": 13}}}}, "n": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.event": {"tf": 1.4142135623730951}, "comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 16, "d": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.shared.types": {"tf": 1}}, "df": 19}, "y": {"docs": {"comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1.4142135623730951}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 5}}, "s": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPFactory": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 4}}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1}}, "df": 80}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1.4142135623730951}}, "df": 7}}, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}}, "df": 3}, "d": {"docs": {"comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}}, "df": 1, "r": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {"comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 9}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 7}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.step": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IAction": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 6, "s": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}}, "df": 3}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}}, "df": 5}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 10}}}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}}, "df": 1}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}, "comprl.shared.commands": {"tf": 1}, "comprl.shared.types": {"tf": 1}}, "df": 11}, "r": {"1": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.7320508075688772}}, "df": 1}, "2": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}, "docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2.8284271247461903}, "comprl.server.data.interfaces.UserRole": {"tf": 2}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 3.872983346207417}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 2}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 2.23606797749979}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 2}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 2.23606797749979}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 2}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 2.23606797749979}}, "df": 15, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}}, "df": 3}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1.4142135623730951}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 3}}}}}, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.util": {"tf": 1}}, "df": 1}}}}}}}, "b": {"docs": {"comprl.client.networking.ClientProtocol.auth": {"tf": 1}}, "df": 1, "y": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}, "comprl.shared.types": {"tf": 1}}, "df": 7}, "e": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 24, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.managers.MatchmakingManager": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2, "d": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 9}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.end_game": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent": {"tf": 1}, "comprl.client.agent.Agent": {"tf": 1}, "comprl.client.interfaces.IAgent": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}}, "df": 9, "s": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 6}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}}, "df": 4}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}}, "df": 1}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.agent.Agent.event": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 3, "s": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}}, "df": 1}}}}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 2}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 2}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1.7320508075688772}, "comprl.shared.commands.Error": {"tf": 1}}, "df": 10}}}}, "x": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}}, "df": 5}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}}, "df": 1, "d": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}}, "df": 8}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}}, "df": 2}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 10}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 1}}}}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.agent.Agent": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 3, "s": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}, "comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.interfaces.IAgent.auth": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}}, "df": 52}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 8}, "d": {"docs": {"comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 2}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1.4142135623730951}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.shared.commands.Ready": {"tf": 1}}, "df": 9}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1.4142135623730951}}, "df": 4}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.shared.commands.Step": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1.7320508075688772}, "comprl.server.interfaces.IPlayer.authenticate": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.authenticate": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1.4142135623730951}}, "df": 14}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.networking": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {"comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 4}, "d": {"docs": {"comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 4}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2, "s": {"docs": {"comprl.client.interfaces.IAgent.run": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.shared.commands.Auth": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"comprl.client.agent.Agent": {"tf": 1}, "comprl.client.interfaces.IAgent.run": {"tf": 1}, "comprl.client.networking.ClientProtocol": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.UserRole": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPFactory": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}}, "df": 18, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.on_message": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionMade": {"tf": 1}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1}}, "df": 32}, "r": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"comprl.client.interfaces.IAgent": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}}, "df": 2}}}, "s": {"docs": {"comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.end_game": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.networking.COMPFactory": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.networking.COMPPlayer.authenticate": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 3, "r": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"comprl.client.agent.Agent": {"tf": 1}}, "df": 1}}, "d": {"docs": {"comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}}, "df": 1}, "s": {"docs": {"comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}}, "df": 3}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.4142135623730951}, "comprl.shared.commands.EndGame": {"tf": 1}}, "df": 8}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.7320508075688772}, "comprl.client.networking.connect_agent": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1.4142135623730951}}, "df": 3}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.event": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.7320508075688772}, "comprl.server.networking.launch_server": {"tf": 1}}, "df": 6}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.interfaces.IServer": {"tf": 1}, "comprl.shared.commands": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 3}}}}}}, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 2}}}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.interfaces.IServer.on_update": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IPlayer.disconnect": {"tf": 1}}, "df": 1, "s": {"docs": {"comprl.client.agent.Agent.on_disconnect": {"tf": 1}, "comprl.client.interfaces.IAgent.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}}, "df": 7}, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}}, "df": 4}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.networking.COMPPlayer.disconnect": {"tf": 1}}, "df": 3}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.auth": {"tf": 1}, "comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 6, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"comprl.client.networking.ClientProtocol.ready": {"tf": 1}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 1}}, "df": 6}}}}}}, "[": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}}, "df": 1}}}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.sql_backend": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData": {"tf": 1.4142135623730951}}, "df": 4, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}}, "df": 7}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1.4142135623730951}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameEndState": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1.7320508075688772}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces.GameEndState": {"tf": 1}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2.449489742783178}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 2.6457513110645907}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 2}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 2}, "comprl.server.interfaces.IGame.__init__": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.start_game": {"tf": 1.4142135623730951}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1.7320508075688772}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 2}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}, "comprl.server.util.IDGenerator": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1.4142135623730951}, "comprl.server.util.ConfigProvider.set": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth": {"tf": 1.4142135623730951}}, "df": 54}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}}, "df": 3}}}, "s": {"docs": {"comprl.client.interfaces.IAgent.on_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connection_error": {"tf": 1}}, "df": 4}}}}}, "n": {"docs": {"comprl.client.agent.Agent.on_error": {"tf": 1}, "comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.remove": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}, "comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1}}, "df": 12, "l": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.networking.ClientProtocol.end_game": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.is_ready": {"tf": 1}, "comprl.client.interfaces.IAgent.on_start_game": {"tf": 1}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 1}, "comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.auth": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.networking.COMPPlayer.is_ready": {"tf": 1}}, "df": 9}}}}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 4}}}}}}}}}, "v": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}, "comprl.server.networking.COMPPlayer.get_action": {"tf": 1}}, "df": 5}, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 2}, "comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_error": {"tf": 1}, "comprl.client.networking.ClientProtocol.on_message": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1.4142135623730951}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}}, "df": 12, "s": {"docs": {"comprl.server.data.sql_backend": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1.7320508075688772}}, "df": 3, "[": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.GameManager.get": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "r": {"docs": {"comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.networking.ClientProtocol.connectionLost": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}}, "df": 4}, "s": {"docs": {"comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}}, "df": 1}}, "g": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "c": {"docs": {"comprl.server.interfaces": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}}, "df": 4, "[": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"comprl.client.interfaces.IAgent.get_step": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "p": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.sql_backend.SQLiteConnectionInfo": {"tf": 1}, "comprl.server.networking.launch_server": {"tf": 1}, "comprl.shared.commands.Auth": {"tf": 1}}, "df": 5}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.server.interfaces": {"tf": 1}}, "df": 1, "e": {"docs": {"comprl.client.agent.Agent.run": {"tf": 1}, "comprl.client.networking.ClientProtocol.__init__": {"tf": 1.4142135623730951}, "comprl.client.networking.connect_agent": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.PlayerManager.add": {"tf": 1}, "comprl.server.managers.PlayerManager.remove": {"tf": 1}, "comprl.server.managers.PlayerManager.get_user_id": {"tf": 1}, "comprl.server.managers.PlayerManager.get_player_by_id": {"tf": 1}, "comprl.server.managers.PlayerManager.broadcast_error": {"tf": 1}, "comprl.server.managers.PlayerManager.disconnect_all": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.networking.COMPServerProtocol": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.add_connection_made_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_lost_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_timeout_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.add_connection_error_callback": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionMade": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionLost": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_token": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.is_ready": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.get_step": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_error": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.send_message": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.disconnect": {"tf": 1}, "comprl.server.networking.COMPFactory.buildProtocol": {"tf": 1}}, "df": 30}}, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"comprl.server.data.interfaces.UserRole": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"comprl.server.data.sql_backend.UserData.get_user_id": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_error": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_info": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_error": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_info": {"tf": 1}}, "df": 10}}}, "y": {"docs": {"comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1.4142135623730951}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1}, "comprl.server.data.sql_backend.UserData.__init__": {"tf": 1}, "comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 2}}, "df": 8, "l": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}}, "df": 2}}}, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"comprl.client.networking": {"tf": 1}, "comprl.server.interfaces": {"tf": 1}, "comprl.server.networking": {"tf": 1}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.__init__": {"tf": 1}}, "df": 5}}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"comprl.shared.commands.Step": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"comprl.client.interfaces.IAgent.on_start_game": {"tf": 1.7320508075688772}, "comprl.client.interfaces.IAgent.on_end_game": {"tf": 2}, "comprl.client.networking.ClientProtocol.start_game": {"tf": 2}, "comprl.client.networking.ClientProtocol.end_game": {"tf": 1.7320508075688772}, "comprl.server.data.interfaces": {"tf": 1}, "comprl.server.data.interfaces.GameEndState": {"tf": 2}, "comprl.server.data.interfaces.GameResult": {"tf": 1}, "comprl.server.data.interfaces.GameResult.__init__": {"tf": 2.23606797749979}, "comprl.server.data.sql_backend": {"tf": 1}, "comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.GameData.add": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.GameData.remove": {"tf": 1.7320508075688772}, "comprl.server.data.sql_backend.UserData": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_start": {"tf": 1}, "comprl.server.interfaces.IPlayer.notify_end": {"tf": 1}, "comprl.server.interfaces.IGame": {"tf": 2.23606797749979}, "comprl.server.interfaces.IGame.__init__": {"tf": 1}, "comprl.server.interfaces.IGame.add_finish_callback": {"tf": 1}, "comprl.server.interfaces.IGame.start": {"tf": 1.4142135623730951}, "comprl.server.interfaces.IGame.force_end": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1.4142135623730951}, "comprl.server.managers": {"tf": 1}, "comprl.server.managers.GameManager": {"tf": 2.23606797749979}, "comprl.server.managers.GameManager.start_game": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.end_game": {"tf": 1.7320508075688772}, "comprl.server.managers.GameManager.get": {"tf": 2}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1.7320508075688772}, "comprl.server.managers.MatchmakingManager": {"tf": 1}, "comprl.server.managers.MatchmakingManager.__init__": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPServerProtocol.notify_end": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1.7320508075688772}, "comprl.server.networking.COMPPlayer.notify_end": {"tf": 1.7320508075688772}, "comprl.shared.commands.Ready": {"tf": 1}, "comprl.shared.commands.StartGame": {"tf": 1}, "comprl.shared.commands.EndGame": {"tf": 1}}, "df": 37, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.interfaces.GameResult.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.data.sql_backend.GameData.add": {"tf": 1}, "comprl.server.interfaces.IGame.get_result": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.interfaces.IGame": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.GameManager.end_game": {"tf": 1}, "comprl.server.managers.GameManager.get": {"tf": 1}, "comprl.server.managers.GameManager.get_stored_actions": {"tf": 1}, "comprl.server.networking.COMPServerProtocol.notify_start": {"tf": 1}, "comprl.server.networking.COMPPlayer.notify_start": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 8}}, "s": {"docs": {"comprl.server.managers.GameManager": {"tf": 1}, "comprl.server.managers.GameManager.force_game_end": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 3}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"comprl.server.managers.MatchmakingManager.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.step": {"tf": 1}, "comprl.server.managers.GameManager.start_game": {"tf": 1}, "comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"comprl.server.managers.GameManager.get_stored_actions": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"comprl.server.interfaces.IPlayer.get_action": {"tf": 1}, "comprl.server.interfaces.IServer.on_start": {"tf": 1}, "comprl.server.interfaces.IServer.on_stop": {"tf": 1}, "comprl.server.interfaces.IServer.on_connect": {"tf": 1}, "comprl.server.interfaces.IServer.on_disconnect": {"tf": 1}, "comprl.server.interfaces.IServer.on_timeout": {"tf": 1}, "comprl.server.interfaces.IServer.on_remote_error": {"tf": 1}, "comprl.server.interfaces.IServer.on_update": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}}, "df": 9}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.util.IDGenerator.generate_player_id": {"tf": 1}, "comprl.server.util.IDGenerator.generate_game_id": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {"comprl.shared.commands.Error": {"tf": 1}, "comprl.shared.commands.Message": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"comprl.client.networking.ClientProtocol.auth": {"tf": 1.4142135623730951}, "comprl.shared.commands.Auth": {"tf": 1.4142135623730951}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"comprl.server.data.sql_backend.UserData.is_verified": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.data.sql_backend.UserData.add": {"tf": 1.4142135623730951}, "comprl.server.data.sql_backend.UserData.set_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.managers.PlayerManager.update_matchmaking_parameters": {"tf": 1.4142135623730951}, "comprl.server.networking.COMPServerProtocol.connectionTimeout": {"tf": 1}, "comprl.server.util.ConfigProvider.get": {"tf": 1}, "comprl.server.util.ConfigProvider.set": {"tf": 1.4142135623730951}}, "df": 6, "s": {"docs": {"comprl.server.data.sql_backend.UserData.get_matchmaking_parameters": {"tf": 1}, "comprl.server.managers.PlayerManager.get_matchmaking_parameters": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.networking.COMPServerProtocol": {"tf": 1}}, "df": 1}}}}}}}, "k": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"comprl.client.networking.ClientProtocol.ready": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "y": {"docs": {"comprl.server.util.ConfigProvider.get": {"tf": 1.4142135623730951}, "comprl.server.util.ConfigProvider.set": {"tf": 1.4142135623730951}}, "df": 2}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"comprl.server.data.sql_backend.GameData": {"tf": 1}, "comprl.server.data.sql_backend.UserData": {"tf": 1}}, "df": 2}}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"comprl.server.managers.MatchmakingManager.try_match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.match": {"tf": 1}, "comprl.server.managers.MatchmakingManager.remove": {"tf": 1}}, "df": 3}}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true}; + + // mirrored in build-search-index.js (part 1) + // Also split on html tags. this is a cheap heuristic, but good enough. + elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/); + + let searchIndex; + if (docs._isPrebuiltIndex) { + console.info("using precompiled search index"); + searchIndex = elasticlunr.Index.load(docs); + } else { + console.time("building search index"); + // mirrored in build-search-index.js (part 2) + searchIndex = elasticlunr(function () { + this.pipeline.remove(elasticlunr.stemmer); + this.pipeline.remove(elasticlunr.stopWordFilter); + this.addField("qualname"); + this.addField("fullname"); + this.addField("annotation"); + this.addField("default_value"); + this.addField("signature"); + this.addField("bases"); + this.addField("doc"); + this.setRef("fullname"); + }); + for (let doc of docs) { + searchIndex.addDoc(doc); + } + console.timeEnd("building search index"); + } + + return (term) => searchIndex.search(term, { + fields: { + qualname: {boost: 4}, + fullname: {boost: 2}, + annotation: {boost: 2}, + default_value: {boost: 2}, + signature: {boost: 2}, + bases: {boost: 2}, + doc: {boost: 1}, + }, + expand: true + }); +})(); \ No newline at end of file