Esempio n. 1
0
        private void SendControlMessage(MessageType messageType, int systemByte)
        {
            var token = new TaskCompletionSourceToken(ControlMessage, systemByte, messageType);

            if ((byte)messageType % 2 == 1 && messageType != MessageType.SeperateRequest)
            {
                _replyExpectedMsgs[systemByte] = token;
            }

            var sendEventArgs = new SocketAsyncEventArgs
            {
                BufferList = new List <ArraySegment <byte> >(2)
                {
                    ControlMessageLengthBytes,
                    new ArraySegment <byte>(new MessageHeader
                    {
                        DeviceId    = 0xffff,
                        MessageType = messageType,
                        SystemBytes = systemByte
                    }.EncodeTo(new byte[10]))
                },
                UserToken = token,
            };

            sendEventArgs.Completed += SendControlMessage_Completed;
            if (!_socket.SendAsync(sendEventArgs))
            {
                SendControlMessage_Completed(_socket, sendEventArgs);
            }
        }
Esempio n. 2
0
        internal Task <SecsMessage> SendDataMessageAsync(SecsMessage secsMessage, int systemByte)
        {
            if (State != ConnectionState.Selected)
            {
                throw new SecsException("Device is not selected");
            }

            var token = new TaskCompletionSourceToken(secsMessage, systemByte, MessageType.DataMessage);

            if (secsMessage.ReplyExpected)
            {
                _replyExpectedMsgs[systemByte] = token;
            }

            var header = new MessageHeader()
            {
                S             = secsMessage.S,
                F             = secsMessage.F,
                ReplyExpected = secsMessage.ReplyExpected,
                DeviceId      = DeviceId,
                SystemBytes   = systemByte,
            };
            var bufferList = secsMessage.RawDatas.Value;

            bufferList[1] = new ArraySegment <byte>(header.EncodeTo(new byte[10]));
            var sendEventArgs = new SocketAsyncEventArgs
            {
                BufferList = bufferList,
                UserToken  = token,
            };

            sendEventArgs.Completed += SendDataMessage_Completed;
            if (!_socket.SendAsync(sendEventArgs))
            {
                SendDataMessage_Completed(_socket, sendEventArgs);
            }
            return(token.Task);
        }