def __init__(self, clientObject, serializer): # Alias for convenience self.serializer = serializer self.clientObject = clientObject self.nat = NATService(clientObject)
class GTGClientProtocol(basic.LineReceiver): def __init__(self, clientObject, serializer): # Alias for convenience self.serializer = serializer self.clientObject = clientObject self.nat = NATService(clientObject) def lineReceived(self, line): try: #TODO: Perhaps in the future we should make (de)serialization operations asynchronous, # not sure if this is worth the effort/overhead or not. response = self.serializer.deserialize(line) if PRINT_PACKETS: log.msg("IN : %s | %s" % (response.__class__.__name__, line)) # User Objects if isinstance(response, User) and self.clientObject.mainWindowHandler: self.clientObject.addUser(response) if isinstance(response, DeltaUser) and self.clientObject.mainWindowHandler: self.clientObject.updateUser(response) # Region Objects if isinstance(response, Region) and self.clientObject.mainWindowHandler: self.clientObject.addRegion(response) if isinstance(response, DeltaRegion) and self.clientObject.mainWindowHandler: self.clientObject.updateRegion(response) elif isinstance(response, NATCheckResponse) and self.clientObject.mainWindowHandler: log.msg("[NAT] External Status = " + str(response.status)) self.nat.close() if response.status: self.loopback.run() else: delta = DeltaUser(self.clientObject.localUUID) delta.NATStatus = False self.writeRequest(delta) # Login Stuff elif isinstance(response, LoginResponse) and self.clientObject.loginHandler: if isinstance(response, LoginSuccess): self.clientObject.localUUID = response.UUID self.clientObject.localGrid = response.grid self.clientObject.email = response.email self.clientObject.externalhost = response.externalhost self.clientObject.mainWindowHandler = \ self.clientObject.windowFactory.buildWindow("mainWindow", MainWindowHandler) self.clientObject.mainWindowHandler.window.show_all() self.clientObject.mainWindowHandler.setStatus('Logged in to coordination server.') self.clientObject.loginHandler.window.destroy() self.clientObject.loginHandler = None self.loopback = LoopbackService(self.clientObject, self.clientObject.externalhost) self.nat.run(self.clientObject.maxregionport) else: showModalDialog( self.clientObject.loginHandler.window, Gtk.MessageType.ERROR, response.message) # Create User Stuff elif isinstance(response, CreateUserResponse) and self.clientObject.createUserWindowHandler: if isinstance(response, CreateUserSuccess): self.clientObject.createUserWindowHandler.onCreateUserSuccess() self.clientObject.createUserWindowHandler.window.destroy() self.clientObject.createUserWindowHandler = None else: showModalDialog( self.clientObject.createUserWindowHandler.window, Gtk.MessageType.ERROR, response.message) except serialization.InvalidSerializedDataException: log.msg("Server sent bad data.") self.transport.loseConnection() def connectionLost(self, reason): if not self.clientObject.dieing: showModalDialog(None, Gtk.MessageType.ERROR, 'Connection lost!') self.clientObject.dieing = True self.clientObject.stop() def writeRequest(self, request): line = self.serializer.serialize(request) if PRINT_PACKETS: log.msg("OUT: %s | %s" % (request.__class__.__name__, line)) self.transport.write(line + "\r\n")