gnuradionetwork/frn/manager/remote.py

88 lines
2.5 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):
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, server='frn.no-ip.info', port=10025, maskParrot=True, reactor=None):
if reactor is None:
from twisted.internet import reactor
self.reactor = reactor
else:
self.reactor = reactor
self.server = server
self.port = port
self.maskParrot = maskParrot
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):
if self.maskParrot and user.BC == 'Parrot':
u = user.copy(BC='PC Only')
else:
u = user.copy()
return self.factory.client.sendClientLogin(u)
def clientLogout(self, user):
if self.maskParrot and user.BC == 'Parrot':
u = user.copy(BC='PC Only')
else:
u = user.copy()
return self.factory.client.sendClientLogout(u)
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: