Ejemplo n.º 1
0
        void HandleDataMessage(MessageHeader header, SecsMessage msg)
        {
            int systembyte = header.SystemBytes;

            if (header.DeviceId != DeviceId && msg.S != 9 && msg.F != 1)
            {
                _logger.MessageIn(msg, systembyte);
                _logger.Warning("Received Unrecognized Device Id Message");
                SendDataMessageAsync(new SecsMessage(9, 1, false, "Unrecognized Device Id", Item.B(header.Bytes)), NewSystemId);
                return;
            }

            if (msg.F % 2 != 0)
            {
                if (msg.S != 9)
                {
                    //Primary message
                    _logger.MessageIn(msg, systembyte);
                    PrimaryMessageReceived?.Invoke(this, new PrimaryMessageWrapper(this, header, msg));
                    return;
                }
                // Error message
                var headerBytes = (byte[])msg.SecsItem.Values;
                systembyte = BitConverter.ToInt32(new[] { headerBytes[9], headerBytes[8], headerBytes[7], headerBytes[6] }, 0);
            }

            // Secondary message
            _logger.MessageIn(msg, systembyte);
            TaskCompletionSourceToken ar;

            if (_replyExpectedMsgs.TryGetValue(systembyte, out ar))
            {
                ar.HandleReplyMessage(msg);
            }
        }
Ejemplo n.º 2
0
        private void HandleDataMessage(MessageHeader header, SecsMessage secsMessage)
        {
            var systemByte = header.SystemBytes;

            if (header.DeviceId != DeviceId && secsMessage.S != 9 && secsMessage.F != 1)
            {
                Logger.Error("Received Unrecognized Device Id Message");
                SecsMessage replyWrongDeviceIdMsg = new SecsMessage(
                    9,
                    1,
                    false,
                    Resources.S9F1,
                    Item.B(header.EncodeTo(new byte[10])));// 将header作为消息体返回
                SendDataMessageAsync(replyWrongDeviceIdMsg, NewSystemId);

                if (_replyExpectedMsgs.TryGetValue(systemByte, out var ar1))
                {
                    ar1.HandleReplyMessage(replyWrongDeviceIdMsg);
                }
                return;
            }

            if (secsMessage.F % 2 != 0)
            {
                if (secsMessage.S != 9)
                {
                    _taskFactory.StartNew((wrapper) =>
                    {
                        PrimaryMessageReceived?.Invoke(this, wrapper as PrimaryMessageWrapper);
                    }, new PrimaryMessageWrapper(this, header, secsMessage));
                    return;
                }
                // Error message
                var headerBytes = secsMessage.SecsItem.GetValues <byte>();// 解析出MessageHeader的Bytes
                systemByte = BitConverter.ToInt32(new byte[] { headerBytes[9], headerBytes[8], headerBytes[7], headerBytes[6] }, 0);
            }

            if (_replyExpectedMsgs.TryGetValue(systemByte, out var ar))
            {
                ar.HandleReplyMessage(secsMessage);
            }
        }