100 lines
3.1 KiB
Python
100 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright 2010 Maurizio Porrato <maurizio.porrato@gmail.com>
|
|
# 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, onConnect, onDisconnect):
|
|
self.user = user
|
|
self.onConnect = onConnect
|
|
self.onDisconnect = onDisconnect
|
|
self.authResult = False
|
|
self.client = None
|
|
self.managerReady = Deferred()
|
|
self.client = None
|
|
|
|
def clientConnectionFailed(self, connector, reason):
|
|
self.authResult = False
|
|
self.client = None
|
|
self.managerReady = Deferred()
|
|
self.onDisconnect(self.protocol)
|
|
FRNManagerClientFactory.clientConnectionFailed(
|
|
self, connector, reason)
|
|
self.managerConnection.addCallback(self.connectionReady)
|
|
|
|
def clientConnectionLost(self, connector, reason):
|
|
self.authResult = False
|
|
self.client = None
|
|
self.managerReady = Deferred()
|
|
self.onDisconnect(self.protocol)
|
|
FRNManagerClientFactory.clientConnectionLost(
|
|
self, connector, reason)
|
|
self.managerConnection.addCallback(self.connectionReady)
|
|
|
|
def connectionReady(self, client):
|
|
def authDone(res):
|
|
log.msg("Auth: %s" % str(res))
|
|
if res['al'] == '0':
|
|
self.authResult = res
|
|
self.onConnect(client)
|
|
self.managerReady.callback(res)
|
|
else:
|
|
client.transport.loseConnection()
|
|
return res
|
|
self.client = client
|
|
self.client.sendServerLogin(self.user).addCallback(authDone)
|
|
|
|
|
|
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 onManagerConnect(self, protocol):
|
|
pass
|
|
|
|
def onManagerDisconnect(self, protocol):
|
|
pass
|
|
|
|
def doConnect(self):
|
|
self.reactor.connectTCP(self.server, self.port, self.factory)
|
|
self.factory.managerConnection.addCallback(self.factory.connectionReady)
|
|
return self.factory.managerReady
|
|
|
|
def serverLogin(self, user):
|
|
self.factory = CustomManagerClientFactory(
|
|
user, self.onManagerConnect, self.onManagerDisconnect)
|
|
return self.doConnect()
|
|
|
|
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:
|