< 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()