Search code examples
pythonuser-interfacexml-rpckivy

Kivy and XML RPC


I've been trying to perform communication between a kivy GUI module (my server) and another python module (my client). But so far I have problems running the xml rpc server along with the GUI run() function. I still have that problem even after running my server in a thread. I hope someone has suggestions on how to fix my code, or just how to xml-rpc along with kivy.

Here is my code:

import kivy

kivy.require('1.7.1')

from kivy.lang import Builder

from kivy.uix.gridlayout import GridLayout

from kivy.app import App

from threading import Thread

from kivy.clock import Clock

Builder.load_file('kivy_gui.kv')

class RoamClientInterface(GridLayout):

    """
    Sets up connection with XMLRPC server

    """

    move = False

    """
    driveForward() -> Moves robot forward
    """

    def driveForward(self):
        self.move = True

    """
    stop() -> stops robot from moving
    """

    def stop(self):
        self.move = False

    def returnBool(self):
        return self.move

class ClientInterface(App):

    def build(self):
        return RoamClientInterface()

    def sendCommands(dt):

        print "start"
        print ""
        from SimpleXMLRPCServer import SimpleXMLRPCServer
        server = SimpleXMLRPCServer(("localhost", 5000))
        print "initialize server"
        print ""
        server.register_instance(RoamClientInterface())
        print "register instance"
        print ""
        # while True:

        try:
            print "try handle request"
            print ""
            server.handle_request()
            print "print handle request"
            print ""
        except KeyboardInterrupt:
            import sys
            sys.exit()

if __name__ == '__main__':
    serverThread = Thread(target=sendCommands(4))
    serverThread.start()
   # Clock.schedule_once(sendCommands)
    ClientInterface().run()

Solution

  • I got to solve the problem. It is actually necessary to put it into a inside the RoamClientInterface to make it work, instead of putting it into my main function like I have it above. I can give more detail info (show code) if anybody needs help