예제 #1
0
파일: server.py 프로젝트: Ohmnivore/Frenzy
    def _on_socket_data(self, data, addr):
        self._log.debug('Got data %s bytes in length from %s' %
                        (str(len(data)), str(addr)))

        if not addr in self._peers and not self._accept_new_connections:
            return

        if not addr in self._peers:
            new_peer = Service('Peer', {'parent': self, 'address': addr})
            self._peers[addr] = new_peer

            new_peer.OnDisconnect += self._Peer_OnDisconnect
            new_peer.OnError += self._Peer_OnError
            new_peer.OnMessage += self._Peer_OnMessage
            new_peer.OnConnectRequest += self._Peer_OnConnectRequest

        self._peers[addr].process_inbound_packet(data)
예제 #2
0
    def connect(self, address):
        '''
        Initiate a connection to the server at the specified address.

        This method will put the socket into the `CONNECTING` state. If a
        connection is already established a ClientError exception is raised.

        :Parameters:
            address : (host, port)
                Host address. An ArgumentError exception will be raised for
                an invalid address.
        '''
        if self.is_active():
            raise ClientError(
                'Client cannot reconnect in a CONNECTING or CONNECTED state')
        if len(address) != 2:
            raise ArgumentError('Expected parameter is (host, port) tuple')

        host = address[0]

        try:
            port = int(address[1])
        except ValueError:
            raise ArgumentError('%s is not a valid port' % address[1])
        if port > 65535 or port < 1:
            raise ArgumentError('%s is not a valid port' % port)

        #port = 6385
        self._create_socket()
        self._connect_socket((host, port))
        self._address = (host, port)

        self._connection = Service('Connection', {'parent': self})
        self._connection.OnConnectRequestAccepted += \
            self._Connection_OnConnectRequestAccepted
        self._connection.OnConnectRequestRejected += \
            self._Connection_OnConnectRequestRejected
        self._connection.OnError += self._Connection_OnError
        self._connection.OnDisconnect += self._Connection_OnDisconnect
        self._connection.OnMessage += self._Connection_OnMessage

        request_message = self.message_factory.get_by_name('ConnectRequest')()
        request_message.protocol.value = netshared.PROTOCOL_VERSION
        self._send_reliable_message(request_message)
        self._state = self.CONNECTING
예제 #3
0
    def __init__(self, parent=None, address=None):
        self._connected = False
        self.parent = parent
        self._socket = parent.socket
        self._address = address
        self._last_receive_timestamp = time.time()
        self._pending_disconnect = False

        self.OnConnectRequest = Event()
        self.OnDisconnect = Event()
        self.OnError = Event()
        self.OnMessage = Event()

        self._connection = Service('Connection', {'parent': self})

        self._connection.OnMessage += self._Connection_OnMessage
        self._connection.OnDisconnect += self._Connection_OnDisconnect
        self._connection.OnError += self._Connection_OnError
        self._connection.OnConnectRequest += self._Connection_OnConnectRequest