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); } }
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); }