diff --git a/bumper/confserver.py b/bumper/confserver.py
index 8a406a2..f68774d 100644
--- a/bumper/confserver.py
+++ b/bumper/confserver.py
@@ -198,8 +198,7 @@ class ConfServer:
async def handle_base(self, request):
try:
- # TODO - API Options here for viewing clients, tokens, restarting the server, etc.
- # text = "Bumper!"
+
bots = bumper.db_get().table("bots").all()
clients = bumper.db_get().table("clients").all()
helperbot = bumper.mqtt_helperbot.Client.session.transitions.state
@@ -331,18 +330,27 @@ class ConfServer:
async def restart_Helper(self):
await bumper.mqtt_helperbot.Client.disconnect()
- await bumper.mqtt_helperbot.start_helper_bot()
+ asyncio.create_task(bumper.mqtt_helperbot.start_helper_bot())
async def restart_MQTT(self):
- mqttserver = bumper.mqtt_server.broker
+
+ if not (bumper.mqtt_server.broker.transitions.state == "stopped" or bumper.mqtt_server.broker.transitions.state == "not_started"):
+ # close session writers - this was required so bots would reconnect properly after restarting
+ for sess in list(bumper.mqtt_server.broker._sessions):
+ sessobj = bumper.mqtt_server.broker._sessions[sess][1]
+ if sessobj.session.transitions.state == "connected":
+ await sessobj.writer.close()
- await bumper.mqtt_server.broker.shutdown()
- while not bumper.mqtt_server.broker.transitions.state == "stopped":
- await asyncio.sleep(0.1)
+ aloop = asyncio.get_event_loop()
+ aloop.call_later(
+ 0.1, lambda: asyncio.create_task(bumper.mqtt_server.broker.shutdown())
+ ) # In .1 seconds shutdown broker
+
+ aloop = asyncio.get_event_loop()
+ aloop.call_later(
+ 1.5, lambda: asyncio.create_task(bumper.mqtt_server.broker_coro())
+ ) # In 1.5 seconds start broker
- await bumper.mqtt_server.broker_coro()
- while not bumper.mqtt_server.broker.transitions.state == "started":
- await asyncio.sleep(0.1)
async def restart_XMPP(self):
bumper.xmpp_server.disconnect()
@@ -358,8 +366,8 @@ class ConfServer:
await self.restart_MQTT()
aloop = asyncio.get_event_loop()
aloop.call_later(
- 2, lambda: asyncio.create_task(self.restart_Helper())
- ) # In 2 seconds restart Helperbot
+ 5, lambda: asyncio.create_task(self.restart_Helper())
+ ) # In 5 seconds restart Helperbot
return web.json_response({"status": "complete"})
elif service == "XMPPServer":
await self.restart_XMPP()
@@ -369,6 +377,7 @@ class ConfServer:
except Exception as e:
confserverlog.exception("{}".format(e))
+ pass
async def handle_login(self, request):
try:
diff --git a/bumper/mqttserver.py b/bumper/mqttserver.py
index f28a3f5..dbc05d5 100644
--- a/bumper/mqttserver.py
+++ b/bumper/mqttserver.py
@@ -35,7 +35,7 @@ class MQTTHelperBot:
try:
if self.Client is None:
self.Client = MQTTClient(
- client_id=self.client_id, config={"check_hostname": False}
+ client_id=self.client_id, config={"check_hostname": False, "reconnect_retries": 20}
)
await self.Client.connect(
@@ -207,27 +207,27 @@ class MQTTHelperBot:
class MQTTServer:
- default_config = {}
+ default_config = None
broker = None
async def broker_coro(self):
mqttserverlog.info(
"Starting MQTT Server at {}:{}".format(self.address[0], self.address[1])
- )
- self.broker = hbmqtt.broker.Broker(config=self.default_config)
+ )
try:
await self.broker.start()
except hbmqtt.broker.BrokerException as e:
mqttserverlog.exception(e)
- asyncio.create_task(bumper.shutdown())
+ #asyncio.create_task(bumper.shutdown())
pass
except Exception as e:
mqttserverlog.exception("{}".format(e))
- asyncio.create_task(bumper.shutdown())
+ #asyncio.create_task(bumper.shutdown())
+ pass
def __init__(self, address):
try:
@@ -252,7 +252,7 @@ class MQTTServer:
"keyfile": bumper.server_key,
},
},
- "sys_interval": 10,
+ "sys_interval": 0,
"auth": {
"allow-anonymous": False, # Set to True to allow anonymous authentication
"password-file": os.path.join(
@@ -263,6 +263,8 @@ class MQTTServer:
"topic-check": {"enabled": False},
}
+ self.broker = hbmqtt.broker.Broker(config=self.default_config)
+
except Exception as e:
mqttserverlog.exception("{}".format(e))
@@ -401,6 +403,11 @@ class BumperMQTTServer_Plugin:
bumper.client_set_mqtt(client["resource"], True)
return
+ #async def on_broker_message_received(self, client_id, message):
+ #print(message)
+ # Look at replacing helperbot with code here
+
+
async def on_broker_client_disconnected(self, client_id):
didsplit = str(client_id).split("@")
diff --git a/data/web/templates/home.jinja2 b/data/web/templates/home.jinja2
index 0686d48..238463b 100644
--- a/data/web/templates/home.jinja2
+++ b/data/web/templates/home.jinja2
@@ -3,6 +3,48 @@
Bumper
+
+
@@ -11,21 +53,26 @@
{% endfor %}
-
+
Bumper
-
MQTT Server
+
+
+
Status: {% if mqtt_server[0].state == "started" %}
{{ mqtt_server[0].state }} {% else %}
{{ mqtt_server[0].state }} {% endif %}
Sessions: {{ mqtt_server[1].sessions[0].count }}
-
+
| username | clientid | state |
@@ -37,12 +84,22 @@
{% endfor %}
+
+
+
- XMPP Server
+
+
+
+
+
Status: {% if xmpp_server.server._serving == True %}
running {% else %}
not running {% endif %}
Clients: {{ xmpp_server.clients | length }}
-
+
| uid | jid | state |
@@ -55,23 +112,36 @@
{% endfor %}
+
+
+
+
+
+
+
-
Helperbot
+
Status: {% if helperbot[0].state == "connected" %} {{ helperbot[0].state }} {% else %} {{ helperbot[0].state }} {% endif %}
-
+
+
+
-
+
-
+
| SN | Nickname | Class | DID | Resource | Company | MQTT Connected | XMPP Connected |
@@ -95,12 +165,12 @@
-
+
-
+
| User ID | Realm | Resource | MQTT Connected | XMPP Connected |