diff options
-rw-r--r-- | skype/skyped.py | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/skype/skyped.py b/skype/skyped.py index 12a54742..7c9afdb8 100644 --- a/skype/skyped.py +++ b/skype/skyped.py @@ -34,39 +34,54 @@ def utf8_encode(local_str): return local_str def sig_handler(signum, frame): - print 'Caught signal %d, exiting.' % signum mainloop.quit() def input_handler(fd, io_condition): input = fd.recv(1024) for i in input.split("\n"): - if i: - fd.send(skype.send(i.strip()) + "\n") + if i: + fd.send(skype.send(i.strip()) + "\n") return True +def server(host, port): + sock = socket.socket() + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + sock.bind((host, port)) + sock.listen(1) + gobject.io_add_watch(sock, gobject.IO_IN, listener) + +def listener(sock, *args): + global conn + conn, addr = sock.accept() + fileno = conn.fileno() + gobject.io_add_watch(conn, gobject.IO_IN, input_handler) + return True + +def dprint(msg): + if len(sys.argv) > 1 and sys.argv[1] == "-d": + print msg + class SkypeApi(dbus.service.Object): def __init__(self): bus = dbus.SessionBus() + try: + self.skype_api = bus.get_object(SKYPE_SERVICE, '/com/Skype') + except dbus.exceptions.DBusException: + sys.exit("Can't find any Skype instance. Are you sure you have started Skype?") - try: - self.skype_api = bus.get_object(SKYPE_SERVICE, '/com/Skype') - except dbus.exceptions.DBusException: - sys.exit("Can't find any Skype instance. Are you sure you have started Skype?") - - reply = self.send('NAME ' + CLIENT_NAME) - if reply != 'OK': - sys.exit('Could not bind to Skype client') - - reply = self.send('PROTOCOL 5') - dbus.service.Object.__init__(self, bus, "/com/Skype/Client", bus_name='com.Skype.API') + reply = self.send('NAME ' + CLIENT_NAME) + if reply != 'OK': + sys.exit('Could not bind to Skype client') + reply = self.send('PROTOCOL 5') + dbus.service.Object.__init__(self, bus, "/com/Skype/Client", bus_name='com.Skype.API') # skype -> client (async) @dbus.service.method(dbus_interface='com.Skype.API') def Notify(self, msg_text): global conn text = utf8_decode(msg_text) - print '<<', text + dprint('<< ' + text) if conn: conn.send(msg_text + "\n") @@ -74,34 +89,18 @@ class SkypeApi(dbus.service.Object): def send(self, msg_text): if not len(msg_text): return - print '>> ', msg_text + dprint('>> ' + msg_text) try: reply = utf8_decode(self.skype_api.Invoke(utf8_encode(msg_text))) except dbus.exceptions.DBusException, s: reply = str(s) - print '<< ', reply + dprint('<< ' + reply) return reply -dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) -skype = SkypeApi() -signal.signal(signal.SIGINT, sig_handler) - -mainloop = gobject.MainLoop() - -def server(host, port): - '''Initialize server and start listening.''' - sock = socket.socket() - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.bind((host, port)) - sock.listen(1) - gobject.io_add_watch(sock, gobject.IO_IN, listener) -def listener(sock, *args): - '''Asynchronous connection listener. Starts a handler for each connection.''' - global conn - conn, addr = sock.accept() - fileno = conn.fileno() - gobject.io_add_watch(conn, gobject.IO_IN, input_handler) - return True if __name__=='__main__': + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + skype = SkypeApi() + signal.signal(signal.SIGINT, sig_handler) + mainloop = gobject.MainLoop() server('localhost', 2727) mainloop.run() |