|
@@ -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"""
|