diff --git a/backends/template/template_backend.py b/backends/template/template_backend.py new file mode 100755 index 0000000000000000000000000000000000000000..575d33106b57907ad74b68bb80803f70d8b17c19 --- /dev/null +++ b/backends/template/template_backend.py @@ -0,0 +1,103 @@ +#!/usr/bin/python + +import asyncore, argparse, protocol_pb2, socket, logging +from NetworkPlugin import NetworkPlugin + +np = None + + +logger = logging.getLogger('Template Backend') +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +ch.setFormatter(formatter) +logger.addHandler(ch) + + +def handleTransportData(data): + """ + This function is called when data is received from the NetworkPlugin server + """ + np.handleDataRead(data) + + +class SpectrumPlugin(NetworkPlugin): + global logger + def __init__(self, iochannel): + NetworkPlugin.__init__(self) + self.iochannel = iochannel + logger.info("Starting plugin.") + + def sendData(self, string): + """ + NetworkPlugin uses this method to send the data to networkplugin server + """ + self.iochannel.sendData(string) + logger.info("Starting plugin.") + + def handleLoginRequest(self, user, legacyName, password): + self.handleConnected(user) + logger.info("Added Echo Buddy") + self.handleBuddyChanged(user, "echo", "Echo", [], protocol_pb2.STATUS_ONLINE) + + def handleLogoutRequest(self, user, legacyName): + pass + + def handleMessageSendRequest(self, user, legacyName, message, xhtml = ""): + logger.info("Message sent from " + user + ' to ' + legacyName) + if(legacyName == "echo"): + logger.info("Message Echoed: " + message) + self.handleMessage(user, legacyName, message) + + def handleBuddyUpdatedRequest(self, user, buddyName, alias, groups): + logger.info("Added Buddy " + buddyName) + self.handleBuddyChanged(user, buddyName, alias, groups, protocol_pb2.STATUS_ONLINE) + + def handleBuddyRemovedRequest(self, user, buddyName, groups): + pass + + + +class IOChannel(asyncore.dispatcher): + def __init__(self, host, port, readCallBack): + asyncore.dispatcher.__init__(self) + self.create_socket(socket.AF_INET, socket.SOCK_STREAM) + self.connect((host, port)) + self.handleReceivedData = readCallBack + self.send_buffer = "" + + def sendData(self, data): + self.send_buffer += data + + def handle_connect(self): + pass + + def handle_close(self): + self.close() + + def handle_read(self): + data = self.recv(65536) + self.handleReceivedData(data) + + def handle_write(self): + sent = self.send(self.send_buffer) + self.send_buffer = self.send_buffer[sent:] + + def writable(self): + return (len(self.send_buffer) > 0) + + def readable(self): + return True + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--host', type=str, required=True) + parser.add_argument('--port', type=int, required=True) + parser.add_argument('config_file', type=str) + + args = parser.parse_args() + io = IOChannel(args.host, args.port, handleTransportData) + np = SpectrumPlugin(io) + asyncore.loop()