public void RemoveRawHandler(RawPacketHandler handler) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } lock (_listLock) _wildcardRawHandlers.Remove(handler); }
public void AddRawHandler(string name, RawPacketHandler handler) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } var code = GetCode(name); lock (_listLock) _rawHandlers[code].Add(handler); }
public void RemoveRawHandler(string name, RawPacketHandler handler) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } var opCode = GetOpCode(name); lock (_listLock) _rawHandlers[opCode].Remove(handler); }
public PacketHandler AddHandler(string name, RawPacketHandler handler, PacketFilter filter = null) { if (!Context.Serializer.GameMessages.NameToCode.TryGetValue(name, out var code)) { throw new UnmappedMessageException(); } var ph = new PacketHandler(true, name, code, handler, filter); var list = _codeHandlers[code]; lock (_listLock) list.Add(ph); return(ph); }
private async void ListenAsync(bool once = false) { var cancellationToken = _listenCancellationTokenSource.Token; do { using (var stream = new SerialDeviceStream(_serialDevice)) { var sync1 = new byte[1]; var sync2 = new byte[1]; while (sync2[0] != 0x62) { while (sync1[0] != 0xb5) { await stream.ReadAsync(sync1, 0, sync1.Length, cancellationToken); } await stream.ReadAsync(sync2, 0, sync2.Length, cancellationToken); } Debug.WriteLine("Found sync"); var packet = await Serializer.DeserializeAsync <Packet>(stream, cancellationToken) .ConfigureAwait(false); Debug.WriteLine($"Recieved {packet.Content.MessageId}"); var messageId = packet.Content.MessageId; switch (messageId) { case MessageId.ACK_ACK: case MessageId.ACK_NAK: _commandCompletionSource?.SetResult(packet); break; case MessageId.MON_VER: { var monVer = (MonVer)packet.Content.Payload; var extensions = monVer.Extensions; var protVerExtension = extensions.FirstOrDefault( extension => extension.Value.StartsWith(ProtocolVersionExtensionPrefix)); if (protVerExtension != null) { var extensionParts = protVerExtension.Value.Split(' '); var protocolVersion = extensionParts[1]; //_protocolVersionTaskCompletionSource.SetResult(true); } break; } case MessageId.RXM_RAWX: { RawDataProductVariantUpdated?.Invoke(this, new RawMeasurementDataEventArgs((RxmRawx)packet.Content.Payload)); break; } case MessageId.NAV_PVT: { PositionVelocityTimeUpdated?.Invoke(this, new PositionVelocityTimeEventArgs((NavPvt)packet.Content.Payload)); break; } case MessageId.HNR_PVT: { HighNavRatePositionVelocityTimeUpdated?.Invoke(this, new HighNavRatePositionVelocityTimeEventArgs((HnrPvt)packet.Content.Payload)); break; } } RawPacketHandler?.Invoke(this, new RawPacketHandlerEventArgs(messageId, packet.Content.Payload)); } } while (!cancellationToken.IsCancellationRequested && !once); }
public void RemoveRawHandler(string name, RawPacketHandler handler) { lock (_lock) _rawHandlers[Serializer.GameMessages.NameToOpCode[name]].Remove(handler); }
public void RemoveRawHandler(RawPacketHandler handler) { lock (_lock) _wildcardRawHandlers.Remove(handler); }
public void AddRawHandler(RawPacketHandler handler) { lock (_lock) _wildcardRawHandlers.Add(handler); }