< Back to Code Samples
#
# Question / Answer server -- more python classwork.
# This application is half of an XML-RPC server designed
# to handle dishing out some questions and receiving some
# answers.
import sys
from SimpleXMLRPCServer import *
from xmlrpclib import ServerProxy, Fault, ProtocolError
from pickle import dumps, loads
class QAserver (object):
def __init__ (self, host, port):
super(QAserver, self).__init__()
self.server = self.make_server(host, port)
self.survey = None
def send_questions(self):
return dumps(self.survey.get_questions())
def receive_answers(self, data):
response = loads(data)
self.survey.add_response(response)
def make_server (self, host, port):
"""Initialize (but do not start) and return the XMLRPC server"""
server = SimpleXMLRPCServer((host, port))
server.register_function(self.send_questions, 'get_questions')
server.register_function(self.receive_answers, 'respond')
server.register_introspection_functions()
return server
def start(self):
"""Run the XMLRPC server forever"""
print
print "Press Control-C to interrupt the server."
print
try:
self.server.serve_forever()
except KeyboardInterrupt:
print "Server stopped due to keyboard interrupt."
def stop (self):
"""Stop the XMLRPC server"""
pass
def start_server (survey):
server = QAserver("127.0.0.1",8005)
server.survey = survey
server.start()