gnuradionetwork/frn/manager/remote.py

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: