private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs _) { var serialPort = sender as SerialPort; if (serialPort is null) { throw new Exception("Invalid operation occured"); } var commandHandlersResponses = _printer.HandleReceivedData((sender as SerialPort).ReadExisting()); foreach (var commandHandlerResponse in commandHandlersResponses) { if (!string.IsNullOrEmpty(commandHandlerResponse.OutputReciptBuffer)) { _connections.ForEach(connection => WebsocketActionDispatcher.SendMessage(connection, new SendReceiptOuptutDataAction(commandHandlerResponse.OutputReciptBuffer) )); } if (commandHandlerResponse.OutputCommand != null) { serialPort.Write(commandHandlerResponse.OutputCommand.ToString()); } if (commandHandlerResponse.ClientLineDisplayOutputLine != null) { _connections.ForEach(connection => WebsocketActionDispatcher.SendMessage(connection, new SendClientLineDisplayOutputLine(commandHandlerResponse.ClientLineDisplayOutputLine) )); } } }
protected override void OnStart(string[] args) { _server.Start(socket => { socket.OnOpen = () => { Console.WriteLine("Open!"); lock (_locker) { _connections.Add(socket); } WebsocketActionDispatcher.SendMessage(socket, new ActualTranslationsForSimulatorClientAction()); WebsocketActionDispatcher.SendMessage(socket, new ActualServerStateAction(_serialPort)); WebsocketActionDispatcher.SendMessage(socket, new AvaliblePortsAction()); }; socket.OnClose = () => _connections.Remove(socket); socket.OnMessage = message => { try { _connections.Dispatch(message, _serialPort); } catch (Exception ex) { Console.WriteLine(ex.Message); } }; }); }