# paridhika/mqttws_parking architecture

> Architecture diagram of the GitHub repository paridhika/mqttws_parking, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/paridhika/mqttws_parking
- Repository: https://github.com/paridhika/mqttws_parking

## Overview

MQTTWS_Parking models a parking lot with HiveMQ as the MQTT broker and Python Paho clients generating parking operations. The main workflow is client arrival, MQTT request or sensor status publication, broker-side parking-state handling, and service-time/throughput measurement. The README documents WebSocket transport and server-side handling; the sampled plugin excerpts confirm callback registration and some general broker callbacks, but not the parking-specific message logic. The graph therefore shows documented responsibilities without asserting unverified callback internals.

Main entry points: [`hivemq-3.1.5/bin/hivemq.jar`](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/bin/hivemq.jar) (HiveMQ broker), [`hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/plugin/HelloWorldMainClass.java`](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/plugin/HelloWorldMainClass.java) (Plugin entry), [`paho.mqtt.python/parking_simulation.py`](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py) (Parking clients), [`paho.mqtt.python/src/paho/mqtt/client.py`](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/src/paho/mqtt/client.py) (Paho client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_simulation["Parking simulation"]
  node_simulator["Parking clients"]
  node_parking_model[("Local slot model")]
  node_service_sim["Service-time tool"]
end

subgraph group_messaging["MQTT messaging"]
  node_paho_client["Paho client<br/>[client.py]"]
  node_mqtt_transport["WebSocket MQTT<br/>[config.xml]"]
end

subgraph group_broker["Broker handling"]
  node_broker["HiveMQ broker<br/>[hivemq.jar]"]
  node_plugin_entry["Plugin entry"]
  node_publish_cb["Publish callback"]
  node_subscribe_cb["Subscribe callback"]
  node_connection_cb["Connection callbacks<br/>[ClientConnect.java]"]
  node_disconnect_cb["Disconnect callback"]
  node_persistent_state[("Broker persistence<br/>[persistence]")]
end

subgraph group_measurement["Performance measurement"]
  node_metrics["Service metrics"]
  node_service_metrics["Operation metrics"]
  node_results["Simulation results<br/>[Results]"]
end

node_cars(("Arriving cars"))
node_sensors(("Slot sensors"))

node_cars -->|"initiate requests"| node_simulator
node_sensors -->|"publish status"| node_paho_client
node_simulator -->|"updates slot state"| node_parking_model
node_simulator -->|"creates clients"| node_paho_client
node_service_sim -->|"creates clients"| node_paho_client
node_paho_client -->|"sends MQTT"| node_mqtt_transport
node_mqtt_transport -->|"carries messages"| node_broker
node_broker -->|"starts plugin"| node_plugin_entry
node_plugin_entry -->|"registers callback"| node_publish_cb
node_plugin_entry -->|"registers callback"| node_subscribe_cb
node_plugin_entry -->|"registers callback"| node_connection_cb
node_plugin_entry -->|"registers callback"| node_disconnect_cb
node_broker -->|"dispatches publish"| node_publish_cb
node_broker -->|"dispatches subscribe"| node_subscribe_cb
node_broker -->|"dispatches connect"| node_connection_cb
node_broker -->|"dispatches disconnect"| node_disconnect_cb
node_broker -->|"persists broker state"| node_persistent_state
node_simulator -->|"records service times"| node_metrics
node_service_sim -->|"records service times"| node_service_metrics
node_metrics -->|"writes results"| node_results
node_service_metrics -->|"writes results"| node_results

click node_simulator "https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py"
click node_parking_model "https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py"
click node_service_sim "https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/calculateServiceTime.py"
click node_paho_client "https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/src/paho/mqtt/client.py"
click node_mqtt_transport "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/conf/config.xml"
click node_broker "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/bin/hivemq.jar"
click node_plugin_entry "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/plugin/HelloWorldMainClass.java"
click node_publish_cb "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/PublishReceived.java"
click node_subscribe_cb "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/SubscribeReceived.java"
click node_connection_cb "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/ClientConnect.java"
click node_disconnect_cb "https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/ClientDisconnect.java"
click node_persistent_state "https://github.com/paridhika/mqttws_parking/tree/master/hivemq-3.1.5/data/persistence"
click node_metrics "https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py"
click node_service_metrics "https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/calculateServiceTime.py"
click node_results "https://github.com/paridhika/mqttws_parking/tree/master/paho.mqtt.python/Results"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_simulator,node_parking_model,node_service_sim toneBlue
class node_paho_client,node_mqtt_transport toneAmber
class node_broker,node_plugin_entry,node_publish_cb,node_subscribe_cb,node_connection_cb,node_disconnect_cb,node_persistent_state toneMint
class node_metrics,node_service_metrics,node_results toneRose
class node_cars,node_sensors toneIndigo
```

## Components

### Parking simulation

- [Parking clients](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py): `paho.mqtt.python/parking_simulation.py`
- [Local slot model](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py): `paho.mqtt.python/parking_simulation.py`
- [Service-time tool](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/calculateServiceTime.py): `paho.mqtt.python/calculateServiceTime.py`

### MQTT messaging

- [Paho client](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/src/paho/mqtt/client.py): `paho.mqtt.python/src/paho/mqtt/client.py`
- [WebSocket MQTT](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/conf/config.xml): `hivemq-3.1.5/conf/config.xml`

### Broker handling

- [HiveMQ broker](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/bin/hivemq.jar): `hivemq-3.1.5/bin/hivemq.jar`
- [Plugin entry](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/plugin/HelloWorldMainClass.java): `hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/plugin/HelloWorldMainClass.java`
- [Publish callback](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/PublishReceived.java): `hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/PublishReceived.java`
- [Subscribe callback](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/SubscribeReceived.java): `hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/SubscribeReceived.java`
- [Connection callbacks](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/ClientConnect.java): `hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/ClientConnect.java`
- [Disconnect callback](https://github.com/paridhika/mqttws_parking/blob/master/hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/ClientDisconnect.java): `hivemq-3.1.5/plugins/hivemq-hello-world-plugin-master/src/main/java/com/acme/callbacks/ClientDisconnect.java`
- [Broker persistence](https://github.com/paridhika/mqttws_parking/tree/master/hivemq-3.1.5/data/persistence): `hivemq-3.1.5/data/persistence`

### Performance measurement

- [Service metrics](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/parking_simulation.py): `paho.mqtt.python/parking_simulation.py`
- [Operation metrics](https://github.com/paridhika/mqttws_parking/blob/master/paho.mqtt.python/calculateServiceTime.py): `paho.mqtt.python/calculateServiceTime.py`
- [Simulation results](https://github.com/paridhika/mqttws_parking/tree/master/paho.mqtt.python/Results): `paho.mqtt.python/Results`

### Other components

- **Arriving cars**
- **Slot sensors**

## Connections

- Arriving cars → Parking clients: initiate requests
- Slot sensors → Paho client: publish status
- Parking clients → Local slot model: updates slot state
- Parking clients → Paho client: creates clients
- Service-time tool → Paho client: creates clients
- Paho client → WebSocket MQTT: sends MQTT
- WebSocket MQTT → HiveMQ broker: carries messages
- HiveMQ broker → Plugin entry: starts plugin
- Plugin entry → Publish callback: registers callback
- Plugin entry → Subscribe callback: registers callback
- Plugin entry → Connection callbacks: registers callback
- Plugin entry → Disconnect callback: registers callback
- HiveMQ broker → Publish callback: dispatches publish
- HiveMQ broker → Subscribe callback: dispatches subscribe
- HiveMQ broker → Connection callbacks: dispatches connect
- HiveMQ broker → Disconnect callback: dispatches disconnect
- HiveMQ broker → Broker persistence: persists broker state
- Parking clients → Service metrics: records service times
- Service-time tool → Operation metrics: records service times
- Service metrics → Simulation results: writes results
- Operation metrics → Simulation results: writes results
