Hi, I have run around the on-line documentation for twisted and couldn't find the relevant docs to help my case. If anyone has pointers on what to read, I would gladly read those documents first. Here is the question: I want to run a xmlrpc server and client together. That is, in the same program, I want to be able to listen from other clients that are calling my xmlrpc methods, and from time to time, I want to call the other clients' xmlrpc methods as well.
From the examples I can find, a server is run by invoking an application's run method, while a client is run by invoking the reactor's run method. How can I "register" my own event loop in addition to the application's already existing xmlrpc server that I have added earlier?
For example, let's say I have two clients that implement the adder xmlrpc method (returns the sum of two numbers). I want the clients to call each other's adder method every two seconds. Below is the server sample code from Victor Ng that I am looking at (I only added some code to read arguments from the command line): from twisted.internet import reactor, defer from twisted.web import xmlrpc, server, resource from twisted.enterprise import adbapi import sys if len (sys.argv) >= 5: player_id = int (sys.argv[1]) port_num = int (sys.argv[2]) num_players = int (sys.argv[3]) start_port_num = int (sys.argv[4]) print "Starting agents.py with player_id: %d, port_num: %d, num_players: %d, start_port_num: %d\n" % (player_id, port_num, num_players, start_port_num) class XMLRPCAdder(xmlrpc.XMLRPC): """ An example object to be published """ def run_add(self, d, a, b): d.callback(a+b) def marshallResult(self, data): return "[%s]" % str(data) def xmlrpc_add(self, a, b): d = defer.Deferred() # setup a callback in 2 seconds that executes the callback on the deferred reactor.callLater(2, self.run_add, d, a, b) return d.addCallback(self.marshallResult) def main(): from twisted.internet.app import Application app = Application("simpleDemoServer") root = resource.Resource() child = XMLRPCAdder() root.putChild('RPC2', child) app.listenTCP(port_num, server.Site(root)) return app application = main() if __name__ == '__main__': application.run(save = 0) Thanks in advance. John Lin