---
tags: NewPOS, diagram, architecture
---
# Dock POS (New POS) diagram
## Dock Design
```plantuml
@startuml
package Service {
class Service {
add_characteristic()
get_characteristic()
set_context()
run()
}
class AccessoryService {}
class DockService {
- Accessories
serviceinfo()
run()
handle()
}
class YourService{
- Device
}
DockService -u-|> Service
YourService -u-|> AccessoryService
AccessoryService -u-|> Service
}
package Device {
class Device {
add_service()
get_service()
run()
start()
stop()
}
class Bridge #aliceblue ##blue{
-nodes
add_device()
start()
stop()
}
class YourDevice {
- Services
}
Bridge -d-|> Device
YourDevice -d-|> Device
}
package Channel {
class MQTTChannel {
connect()
disconnect()
loop()
publish()
subscribe()
@property will_set()
@property connected()
}
class ServiceDirectory {
is_primary()
start()
stop()
register_service()
unregister_service()
is_registered()
welcome()
update()
update_sd()
update_service()
lookup_service()
handle_message()
}
MQTTChannel -r- ServiceDirectory:messager
}
DockService -- ServiceDirectory:msd
DockService -- MQTTChannel:messager
DockService --> Bridge:add_service
YourService -r-> DockService:add to accessories
YourService <--> YourDevice:Bind
@enduml
```
## Class Diagram
- Device
- contains Services
- responsible for starting/stopping Services
- Service
- contains the associated Device
- Bridge (Device)
- contains other Devices, responsible for communication between devices
- responsible for starting/stopping other Devices
- DockService (Service)
- contains AccessoryServices
- responsible for initializing/starting/stopping ServiceDirectory
- responsible for initializing/starting/stopping MQTTChannel
- AccessoryService (Service)
- contains associated DockService (context)
- ServiceDirectory
- contains list of service directory
- responsible for registration / lookup of other services / service directory (??)
- MQTTChannel
- contains DockService as its handler (to be changed)
```plantuml
@startuml dock_class_diagram
'skinparam defaultFontSize 20
class MQTTChannel {
- _on_message_handlers
}
class ServiceDirectory {
+ messenger: MQTTChannel
+ start(messenger: MQTTChannel)
+ post_serviceinfo(serviceinfo: Dict[str,?])
'+ register_service(serviceinfo: Dict[str,?])
'+ unregister_service(serviceinfo: Dict[str,?])
}
class Service {
+ context: DockService
+ device: Device
+ set_context(context: DockService)
}
class DockService {
msd: ServiceDirectory
messenger: MQTTChannel
+ add_accessory(accsessory: AccessoryService)
+ handle_event(event)
}
class AccessoryService {
emit_event(event)
}
class PrintService
class EDCService
class HIDInput
class Device {
+ services: Dict[str, Service]
+ add_service(service:Service)
}
class Bridge{
+ nodes: Dict[str, Device]
+ add_device(device: Device)
}
class PrinterDevice
class InvoicePrinter
<> isService
<> usesDock
' DockService -|> Service
' DockService <- Service
Service <|-- isService
isService -- DockService
isService -- AccessoryService
'isService -- EDCService
Device <|-- Bridge
Device <|-- PrinterDevice
Device <|-- EDCDevice
InvoicePrinter <|-- PrinterDevice
'PrinterDevice o-- PrintService
AccessoryService <|-- PrintService
AccessoryService <|-- HIDInput
AccessoryService <|-- EDCService
EDCService <|-- EDC_TSB
usesDock "*" - Service
usesDock --o "1" DockService
' ServiceDirectory o-- MQTTChannel
' DockService o-- MQTTChannel
'ServiceDirectory o- MQTChannel
MQTTChannel "1" - "1" DockService
'DockService "1" - "1" MQTTChannel
MQTTChannel --o ServiceDirectory
DockService *-- ServiceDirectory
'DockService *-- MQTTChannel
'ServiceDirectory -* DockService
Service "*" -o "0..1" Device : "\t\t"
' Service o- Device
' Service -o Device
Device "*" --o "1" Bridge
' Service o- DockService
@enduml
```
## Device/Service object instantiation
```plantuml
@startwbs
* (Device)\nBridge
** (Service)\nDockService
*** ServiceDirectory
*** MQTTChannel
** (EDCDevice)\nEDCDeviceFactory
*** (AccessoryService)\nEDCServiceFactory
** (EDCDevice)\nEDCDevice[TSB,NCCC,FUBO]
*** (AccessoryService)\nEDCService[TSB,NCCC,FUBO]
** (AccessoryService)\nHIDInput
** (AccessoryService)\nCheckDevice
** (Device)\nPrinter
*** (AccessoryService)\nPrinter
@endwbs
```
1. PrinterDevice adds PrintService
- PrintService sets the PrinterDevice as its device
2. EDCDeviceFactory adds EDCServiceFactory
- EDCServiceFactory sets the EDCDeviceFactory as its device
4. EDCDevice[TSB,NCCC,FUBO], adds EDCService[TSB,NCCC,FUBO]
- EDCService[TSB,NCCC,FUBO] sets the EDCDevice[TSB,NCCC,FUBO] as its device
5. DockService adds AccessoryService s
- AccessoryService sets the DockService as its context
- If AccessoryService has device
- Add AccessoryService's device to DockService's device's (Bridge) device list
- Else
- AccessoryService sets the DockService's device (Bridge) as its device
6. Bridge adds DockService
- DockService sets the Bridge as its device
7. Starts Bridge
- run device's services
- start other nodes (device list)
- start PrinterDevice
- run device's services
- start EDCDeviceTSB
- run device's services