Ejemplo n.º 1
0
    def thread():
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            sock.connect(PARSER_SERVER_ADDR)
        except:
            prnt("Failed to connect:")
            prnt(traceback.format_exc())
            wx.CallAfter(failureFunc)
            return

        stream = ByteStream()
        stream.writeByte(pkt.GET_KEY)
        stream.writeString(vanityKey)
        sock.send(stream.toString())

        data = sock.recv(1024)
        sock.close()

        stream = ByteStream(data)

        success = stream.readByte() == 1
        if success:
            key = stream.readString()
            wx.CallAfter(successFunc, key)
        else:
            wx.CallAfter(failureFunc)
Ejemplo n.º 2
0
    def thread():
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            sock.connect(PARSER_SERVER_ADDR)
        except:
            prnt("Failed to connect:")
            prnt(traceback.format_exc())
            wx.CallAfter(failureFunc)
            return

        stream = ByteStream()
        stream.writeByte(pkt.GET_KEY)
        stream.writeString(vanityKey)
        sock.send(stream.toString())

        data = sock.recv(1024)
        sock.close()

        stream = ByteStream(data)

        success = stream.readByte() == 1
        if success:
            key = stream.readString()
            wx.CallAfter(successFunc, key)
        else:
            wx.CallAfter(failureFunc)
Ejemplo n.º 3
0
    def run(self):
        prnt("RaidServer: Booting up...")

        self.port = net.node.bind("swap:raid")

        self.centralSock.setblocking(False)
        while not self.stoppedEvent.isSet():
            now = time()

            # Central server
            r, w, e = select([self.centralSock], [self.centralSock], [], 0)
            if r:
                data = self.centralSock.recv(1024)
                stream = ByteStream(data)
                packetType = stream.readByte()

            if self.port.connectionPending():
                conn = self.port.accept()
                self.clientList.append({'conn': conn, 'playerInfo': None})

            for client in self.clientList:
                conn = client['conn']
                if conn.recvPending():
                    data = conn.recv()
                    if data == None:
                        playerName = client['playerInfo']['name'] if client[
                            'playerInfo'] else "<NoInfo>"
                        prnt("Client (%s) left raid, reason=%s" %
                             (playerName, fuzion.formatError(
                                 conn.closedReason)))
                        self.lastRaidUpdatePoke = time()
                        self.clientList.remove(client)
                        continue
                    packetType = data.readByte()
                    if packetType == pkt.PLAYER_UPDATE:
                        self.processPlayerUpdate(client, data)

            if now - self.lastRaidUpdateSent > 2 and now - self.lastRaidUpdatePoke < 5:
                self.sendRaidUpdate()
                self.lastRaidUpdateSent = now

            sleep(0.1)

        self.port.close()

        for client in self.clientList:
            conn = client['conn']
            conn.close()

        self.centralSock.close()

        prnt("RaidServer: Shutting down...")
Ejemplo n.º 4
0
    def run(self):
        prnt("RaidServer: Booting up...")

        self.port = net.node.bind("swap:raid")

        self.centralSock.setblocking(False)
        while not self.stoppedEvent.isSet():
            now = time()

            # Central server
            r, w, e = select([self.centralSock], [self.centralSock], [], 0)
            if r:
                data = self.centralSock.recv(1024)
                stream = ByteStream(data)
                packetType = stream.readByte()

            if self.port.connectionPending():
                conn = self.port.accept()
                self.clientList.append({ 'conn': conn, 'playerInfo': None })

            for client in self.clientList:
                conn = client['conn']
                if conn.recvPending():
                    data = conn.recv()
                    if data == None:
                        playerName = client['playerInfo']['name'] if client['playerInfo'] else "<NoInfo>"
                        prnt("Client (%s) left raid, reason=%s"%(playerName, fuzion.formatError(conn.closedReason)))
                        self.lastRaidUpdatePoke = time()
                        self.clientList.remove(client)
                        continue
                    packetType = data.readByte()
                    if packetType == pkt.PLAYER_UPDATE:
                        self.processPlayerUpdate(client, data)

            if now - self.lastRaidUpdateSent > 2 and now - self.lastRaidUpdatePoke < 5:
                self.sendRaidUpdate()
                self.lastRaidUpdateSent = now

            sleep(0.1)

        self.port.close()

        for client in self.clientList:
            conn = client['conn']
            conn.close()

        self.centralSock.close()

        prnt("RaidServer: Shutting down...")
Ejemplo n.º 5
0
    def run(self):
        self.acceptTime = time.time()

        if self.state != CS_CONNECTED:
            if not self.loopback:
                # Get tunnel info
                privIp = socket.gethostbyname(socket.gethostname())
                while True:
                    (privPort, pubIp, pubPort) = self.node.reflectAddress()

                    self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                    try:
                        self.sock.bind(('', privPort))
                    except:
                        debug("Fuzion: Port %d taken, selecting new port."%(privPort))
                        continue
                    break

                debug("Bound at", privPort)

                self.node.sendTunnelInfo(self.targetId, self.targetPort, privIp, privPort, pubIp, pubPort)
            else:
                self.state = CS_CONNECTED
                if not self.outbound:
                    self.pushToPort()

        while not self.threadStopped.isSet():
            now = time.time()

            if self.state != CS_CONNECTED:
                self.updateNotConnected()
                time.sleep(0.2)
                continue

            if self.relay:
                r = len(self.relayedRead) > 0
                w = 1
                e = 0
            else:
                r, w, e = select([self.sock], [self.sock], [], 0)
            if r:
                try:
                    data = ByteStream(self._recv())
                except socket.error as e:
                    if e.errno == 10054:
                        # UDP returns a ECONNRESET for IMCP failures, ignore them
                        pass
                    else:
                        debug("Connection errno=%d"%e.errno)
                else:
                    if data:
                        packetType = data.readByte()
                        if packetType == P_DATA:
                            self.pendingRecv.append(data.readString())
                        elif packetType == P_CLOSE:
                            self.closeInternal(ERR_CLOSED_BY_REMOTE)
                            break
                        elif packetType == P_KEEP_ALIVE:
                            pass
                        self.lastPacketReceived = now

                    if not data and data is not None:
                        debug("Empty, but not None packet?")

            if now - self.lastPacketSent > 5:
                packet = ByteStream()
                packet.writeByte(P_KEEP_ALIVE)
                self._send(packet.toString())

                self.lastPacketSent = now

            if self.lastPacketReceived > 0 and now - self.lastPacketReceived > 20:
                debug("Timeout, now=%d, lastPacket=%d, diff=%d"%(now, self.lastPacketReceived, now - self.lastPacketReceived))
                self.closeInternal(ERR_TIMED_OUT)
                break

            time.sleep(0.01)
Ejemplo n.º 6
0
    def run(self):
        self.acceptTime = time.time()

        if self.state != CS_CONNECTED:
            if not self.loopback:
                # Get tunnel info
                privIp = socket.gethostbyname(socket.gethostname())
                while True:
                    (privPort, pubIp, pubPort) = self.node.reflectAddress()

                    self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                    try:
                        self.sock.bind(("", privPort))
                    except:
                        debug("Fuzion: Port %d taken, selecting new port." % (privPort))
                        continue
                    break

                debug("Bound at", privPort)

                self.node.sendTunnelInfo(self.targetId, self.targetPort, privIp, privPort, pubIp, pubPort)
            else:
                self.state = CS_CONNECTED
                if not self.outbound:
                    self.pushToPort()

        while not self.threadStopped.isSet():
            now = time.time()

            if self.state != CS_CONNECTED:
                self.updateNotConnected()
                time.sleep(0.2)
                continue

            if self.relay:
                r = len(self.relayedRead) > 0
                w = 1
                e = 0
            else:
                r, w, e = select([self.sock], [self.sock], [], 0)
            if r:
                try:
                    data = ByteStream(self._recv())
                except socket.error as e:
                    if e.errno == 10054:
                        # UDP returns a ECONNRESET for IMCP failures, ignore them
                        pass
                    else:
                        debug("Connection errno=%d" % e.errno)
                else:
                    if data:
                        packetType = data.readByte()
                        if packetType == P_DATA:
                            self.pendingRecv.append(data.readString())
                        elif packetType == P_CLOSE:
                            self.closeInternal(ERR_CLOSED_BY_REMOTE)
                            break
                        elif packetType == P_KEEP_ALIVE:
                            pass
                        self.lastPacketReceived = now

                    if not data and data is not None:
                        debug("Empty, but not None packet?")

            if now - self.lastPacketSent > 5:
                packet = ByteStream()
                packet.writeByte(P_KEEP_ALIVE)
                self._send(packet.toString())

                self.lastPacketSent = now

            if self.lastPacketReceived > 0 and now - self.lastPacketReceived > 20:
                debug(
                    "Timeout, now=%d, lastPacket=%d, diff=%d"
                    % (now, self.lastPacketReceived, now - self.lastPacketReceived)
                )
                self.closeInternal(ERR_TIMED_OUT)
                break

            time.sleep(0.01)