Skip to content

Commit 220146e

Browse files
committed
GitHub: use Limnoria HTTP server instead of a HTTP server embedded in the plugin.
1 parent fa0d38e commit 220146e

File tree

1 file changed

+7
-53
lines changed

1 file changed

+7
-53
lines changed

GitHub/plugin.py

Lines changed: 7 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -56,37 +56,10 @@
5656
#####################
5757
# Server stuff
5858
#####################
59-
class ThreadedTCPServer(SocketServer.TCPServer):
60-
pass
6159

62-
class RequestHandler(SocketServer.StreamRequestHandler):
63-
def handle(self):
64-
length = 0
65-
currentLine = ''
66-
data = ''
67-
while self.server.enabled:
68-
if not '\r\n' in data:
69-
try:
70-
data += self.request.recv(4096)
71-
except socket.timeout:
72-
time.sleep(0.1) # in case of odd problem
73-
continue
74-
if not data: # Server closed connection
75-
return
76-
if data.startswith('payload=') and \
77-
len(data) == length:
78-
payload = StringIO()
79-
payload.write(urllib.unquote(data[len('payload='):]))
80-
payload.seek(0)
81-
self.server._plugin.announce.onPayload(json.load(payload))
82-
return
83-
elif '\r\n' in data:
84-
splitted = data.split('\r\n')
85-
currentLine = splitted[0]
86-
data = '\r\n'.join(splitted[1:])
87-
88-
if currentLine.startswith('Content-Length: '):
89-
length = int(currentLine[len('Content-Length: '):])
60+
class GithubCallback(utils.httpserver.SupyHTTPServerCallback):
61+
def doPost(self, handler, path, form):
62+
self.plugin.announce.onPayload(json.loads(form['payload'].value))
9063

9164
#####################
9265
# API access stuff
@@ -115,24 +88,9 @@ def __init__(self, irc):
11588
callbacks.Plugin.__init__(self, irc)
11689
instance = self
11790

118-
119-
if not world.testing:
120-
host = self.registryValue('server.host')
121-
port = self.registryValue('server.port')
122-
while True:
123-
try:
124-
self._server = ThreadedTCPServer((host, port),
125-
RequestHandler)
126-
break
127-
except socket.error: # Address already in use
128-
time.sleep(1)
129-
self._server.timeout = 0.5
130-
131-
# Used by request handlers:
132-
self._server._plugin = self
133-
self._server.enabled = True
134-
threading.Thread(target=self._server.serve_forever,
135-
name='GitHub commits listener').start()
91+
callback = GithubCallback()
92+
callback.plugin = self
93+
utils.httpserver.hook('github', callback)
13694

13795
class announce(callbacks.Commands):
13896
def _createPrivmsg(self, channel, payload, commit):
@@ -294,11 +252,7 @@ def info(self, irc, msg, args, owner, name, optlist):
294252
'disable': 'anything'})])
295253
def die(self):
296254
self.__parent.die()
297-
if not world.testing:
298-
self._server.enabled = False
299-
time.sleep(1)
300-
self._server.shutdown()
301-
del self._server
255+
utils.httpserver.unhook('github')
302256

303257

304258
Class = GitHub

0 commit comments

Comments
 (0)