this will be a living doc starting with for connection management: listener: - knows - ip:port to listen to - clients connect with{ip, port, clientType, model, id} - is able to - create coordinators for each clientType - send new clients to coordiantor handlers via chan - depends on - clients sending known data (gRPC) - NewCoordinator func - implements * shouldnt really have any callable methods coordinator: (General) - knows - what client ids have already connected - which managers correlate to which clients - is able to - create managers for new clients - start managers for clients - depends on - listener for client structure - manager for NewManager() function - implements - client connection handling - general manager call manager (general): - knows - client info - timeout - if it is active - is able to - establish a connection with a client - stop when the connection drops - depends on - coordinator for start calls - implements - client connection creation - client info storage manager (reactor): * embedds the gm - knows - devices attached to the reactor - underlying client manager - is able to - maintain device struct - no pings only control logic (i.e remove device, restart etc) - depends on - gm for client conn - coordiantor for starts - implements - reactor structure tracking manager (tui): * embedds the gm - knows - structure of the system (ie reactors:devices) - underlying client manager - is able to - keep track of system changes - updates client from buffer or concurrent grpc? - depends on - RM to get system info - coordinator for starts - implements - system tracking reactor level coordinator: (right away this feels so fat compared) - knows - current connected devices - server to init to - its own hwinfo to establish itself as a client - is able to: - reach out to server on boot - transmit client details - keep reactor devices current - depends on - I2C package to notify of connected devices - hardware info to get its client info - server to handle connection - sm for new manager - implements - reactor status handler for updates to other coords/managers device itself: - knows - probe status ( maybe) - data in buffer - is able to - clear buffer on request - respond to commands - implements - data collection - control execution - depends on - nothing its a driver - maybe the control logic??