From f0680eb182c6583a0e27124825b8261fa87d48ab Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Sun, 4 Aug 2013 04:58:33 +0200 Subject: initial commit --- .gitignore | 1 + socket_notify.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .gitignore create mode 100644 socket_notify.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/socket_notify.py b/socket_notify.py new file mode 100644 index 0000000..5b651a5 --- /dev/null +++ b/socket_notify.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +""" +socket_notify.py - Phenny Socket Notification +Copyright 2013, Alexander Sulfrian +Licensed under the Eiffel Forum License 2. + +http://inamidst.com/phenny/ +""" + +import asyncore, socket, stat, os + +SOCKET_PATH = '/var/run/phenny/socket' + +def setup(phenny): + dir = os.path.dirname(SOCKET_PATH) + if not os.path.exists(dir): + os.makedirs(dir) + Monitor(SOCKET_PATH, phenny) + +class Sender(asyncore.dispatcher): + def __init__(self, sock, phenny): + asyncore.dispatcher.__init__(self, sock) + self.phenny = phenny + + def handle_read(self): + data = self.recv(8192) + if data: + for line in data.split('\n'): + for chan in self.phenny.config.channels: + self.phenny.msg(chan, line) + else: + self.close() + +class Monitor(asyncore.dispatcher): + def __init__(self, path, phenny): + asyncore.dispatcher.__init__(self) + self.phenny = phenny + self.create_socket(socket.AF_UNIX, socket.SOCK_STREAM) + + try: + mode = os.stat(path).st_mode + if stat.S_ISSOCK(mode): + os.unlink(path) + else: + print("Path '%s' exists and is not a socket!" % path) + sys.exit(1) + except OSError: + pass + + self.bind(path) + self.listen(5) + + def handle_accept(self): + pair = self.accept() + if pair is not None: + sock, addr = pair + handler = Sender(sock, self.phenny) -- cgit v1.2.3-1-g7c22