Esempio n. 1
0
        public void RemoveRawHandler(RawPacketHandler handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            lock (_listLock)
                _wildcardRawHandlers.Remove(handler);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public void RemoveRawHandler(string name, RawPacketHandler handler)
 {
     lock (_lock)
         _rawHandlers[Serializer.GameMessages.NameToOpCode[name]].Remove(handler);
 }
Esempio n. 7
0
 public void RemoveRawHandler(RawPacketHandler handler)
 {
     lock (_lock)
         _wildcardRawHandlers.Remove(handler);
 }
Esempio n. 8
0
 public void AddRawHandler(RawPacketHandler handler)
 {
     lock (_lock)
         _wildcardRawHandlers.Add(handler);
 }