# -*- coding: utf-8 -*- # # Copyright 2010 Maurizio Porrato # See LICENSE.txt for copyright info from zope.interface import implements from twisted.internet.defer import Deferred, succeed from frn.manager import IManager from twisted.python import log from frn.protocol.manager import FRNManagerClient, FRNManagerClientFactory class CustomManagerClientFactory(FRNManagerClientFactory): def __init__(self, user): self.user = user self.authResult = False self.client = None self.authDone = False self.deferred = Deferred() def managerConnected(self, connection): def authReply(auth): self.authResult = auth self.authDone = (auth['al'] == '0') if self.authDone: self.deferred.callback(auth) connection.sendServerLogin(self.user).addCallback(authReply) def managerDisconnected(self, connection): pass def buildProtocol(self, addr): p = FRNManagerClientFactory.buildProtocol(self, addr) self.client = p return p class RemoteManager(object): implements(IManager) def __init__(self, reactor, server='frn.no-ip.info', port=10025): self.reactor = reactor self.server = server self.port = port self.factory = None def doConnect(self): self.reactor.connectTCP(self.server, self.port, self.factory) def serverLogin(self, user): self.factory = CustomManagerClientFactory(user) self.doConnect() return self.factory.deferred def serverLogout(self, user): if self.factory.client is not None: return self.factory.client.sendServerLogout(user) def clientLogin(self, user): return self.factory.client.sendClientLogin(user) def clientLogout(self, user): return self.factory.client.sendClientLogout(user) def getClientList(self): return self.factory.client.getClientList() def registerUser(self, user): return self.factory.client.registerUser(user) # vim: set et ai sw=4 ts=4 sts=4: