コード例 #1
0
ファイル: client.py プロジェクト: rabaarabaa/server
 def _send(self, msg_bytes):
     """
     Send bytes to server
     """
     log.d("Sending", sys.getsizeof(msg_bytes), "bytes to server",
           self._server)
     try:
         self._sock.sendall(msg_bytes)
     except (ConnectionResetError, ConnectionAbortedError):
         try:
             self.connect(self._last_user, self._last_pass)
             self._sock.sendall(msg_bytes)
         except socket.error:
             self._alive = False
             raise exceptions.ServerDisconnectError(
                 self.name, "Server is not connected")
     self._sock.sendall(constants.postfix)
コード例 #2
0
ファイル: client.py プロジェクト: fadillzzz/happypandax
    def communicate(self, msg):
        """Send and receive data with server

        params:
            msg -- Message object
        returns:
            json from server
        """
        assert isinstance(msg, message.CoreMessage)

        # log send
        if self._alive:
            self._sock.sendall(msg.serialize(self.name))
            self._sock.sendall(constants.postfix)
            return self._recv()
        else:
            raise exceptions.ServerDisconnectError(
                self.name, "Server already disconnected")
コード例 #3
0
ファイル: client.py プロジェクト: fadillzzz/happypandax
 def _recv(self):
     "returns json"
     # log receive
     try:
         buffer = b''
         while not buffer.endswith(constants.postfix):  # loose
             data = self._sock.recv(constants.data_size)
             if not data:
                 self._alive = False
                 raise exceptions.ServerDisconnectError(
                     self.name, "Server disconnected")
             buffer += data
         # log received
         return utils.convert_to_json(buffer, self.name)
     except socket.error as e:
         # log disconnect
         self.alive = False
         raise exceptions.ServerError(self.name, "{}".format(e))
コード例 #4
0
 def connect(self):
     "Connect to the server"
     if not self._alive:
         try:
             log.i("Client connecting to server at: {}".format(
                 self._server))
             try:
                 self._sock.connect(self._server)
             except (OSError, ConnectionError) as e:
                 if e.errno == errno.EISCONN and self.session:  # already connected
                     self._alive = True
                     return
                 else:
                     raise
             self._alive = True
             self._server_info(self._recv())
             if self.session:
                 self._accepted = True
         except (OSError, ConnectionError) as e:
             self._disconnect()
             raise exceptions.ServerDisconnectError(self.name,
                                                    "{}".format(e))
コード例 #5
0
 def _recv(self):
     "returns json"
     try:
         buffered = None
         eof = False
         while not eof:
             temp = self._sock.recv(constants.data_size)
             if not temp:
                 self._disconnect()
                 raise exceptions.ServerDisconnectError(
                     self.name, "Server disconnected")
             self._buffer += temp
             data, eof = utils.end_of_message(self._buffer)
             if eof:
                 buffered = data[0]
                 self._buffer = data[1]
         log.d("Received", sys.getsizeof(buffered), "bytes from server",
               self._server)
         buffered = gzip.decompress(buffered)
         return utils.convert_to_json(buffered, self.name, log=log)
     except (socket.error, ConnectionError) as e:
         self._disconnect()
         raise exceptions.ConnectionError(self.name, "{}".format(e))