Browse Source

open TCP port and forward messages to configured channel (or owner)

Helge Jung 10 years ago
parent
commit
d4fd28fcef
1 changed files with 49 additions and 0 deletions
  1. 49 0
      modules/ffpb.py

+ 49 - 0
modules/ffpb.py

@@ -7,6 +7,55 @@ import re
 import os
 import subprocess
 
+import socket
+import SocketServer
+import threading
+
+# TODO: move into config file :)
+msgserver_known_senders = {
+	"127.0.0.1": "localhost",
+	"10.132.254.1": "gw01",
+	"10.132.254.2": "gw02",
+	"10.132.254.3": "gw03",
+	"10.132.254.80": "public"
+}
+
+class MsgHandler(SocketServer.BaseRequestHandler):
+	def handle(self):
+		self.data = self.request.recv(2048).strip()
+		sender = self.client_address[0]
+		if sender in msgserver_known_senders:
+			sender = msgserver_known_senders[sender]
+
+		bot = self.server.bot
+		if bot is None:
+			print("ERROR: No bot in handle() :-(")
+			return
+
+		target = bot.config.core.owner
+		if bot.config.has_section('ffpb') and not (bot.config.ffpb.msg_target is None):
+			target = bot.config.ffpb.msg_target
+
+		bot.msg(target, "[{0}] {1}".format(sender,self.data))
+
+class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
+	pass
+
+def setup(bot):
+	host = "localhost"
+	port = 4342
+	if not bot.config.ffpb.msg_host is None: host = bot.config.ffpb.msg_host
+	if not bot.config.ffpb.msg_port is None: port = int(bot.config.ffpb.msg_port)
+
+	msgserver = ThreadingTCPServer((host,port), MsgHandler)
+	msgserver.bot = bot
+	ip, port = msgserver.server_address
+	print("Messaging server listening on {}:{}".format(ip,port))
+
+	msgserver_thread = threading.Thread(target=msgserver.serve_forever)
+	msgserver_thread.daemon = True
+	msgserver_thread.start()
+
 @willie.module.commands('status')
 def ffpb_status(bot, trigger):
 	"""Status des FFPB-Netzes: Anzahl (aktiver) Knoten + Clients"""