public void ReceivedData(byte[] buffer) { DataPacketReceived?.Invoke(this, new CustomPack { Text = Encoding.Default.GetString(buffer) }); }
/// <summary> /// Thread to process incoming packets. /// </summary> private void IncomingPacket_Thread() { while (true) { try { //exit if stopped if (_isStopped) { return; } //wait for data signal, or 15ms _incomingPacketSignal.Wait(15); //vars PacketBase[] packets = null; //lock queue lock (_incomingPackets) { //get packets, if exist if (_incomingPackets.Count > 0) { packets = _incomingPackets.ToArray(); _incomingPackets.Clear(); _incomingPacketSignal.Reset(); } } if (packets == null) { continue; } //process packets foreach (PacketBase packet in packets) { //command request packet if (packet is CommandRequestPacket p1) { //increment counter _commandRequestsReceived++; //fire event CommandRequestPacketReceived?.InvokeFromTask(p1); } //command response packet else if (packet is CommandResponsePacket p2) { //increment counter _commandResponsesReceived++; //record command response received _commandManager.ResponseReceived(p2); //fire event CommandResponsePacketReceived?.InvokeFromTask(p2); } //data packet else if (packet is DataPacket p3) { //increment counter _dataReceived++; //fire event DataPacketReceived?.InvokeFromTask(p3); } } } catch (Exception ex) { Log.Write("IncomingPacket_Thread: Error processing packet"); ErrorHandler.LogError(ex); } } }