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);
             }
         };
     });
 }