/* *************************************************************************** * Copyright 2008 Impinj, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *************************************************************************** */ /* *************************************************************************** * * This code is generated by Impinj LLRP .Net generator. Modification is * not recommended. * *************************************************************************** */ /* *************************************************************************** * File Name: LLRPClient.cs * * Version: 1.0 * Author: Impinj * Organization: Impinj * Date: Jan. 18, 2008 * * Description: This file contains implementation of LLRP client. LLRP * client is used to build LLRP based application *************************************************************************** */ using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.Runtime.Remoting; using System.Collections; using System.Xml; using System.Xml.Serialization; using System.Data; using LLRP.DataType; namespace LLRP { //delegates for sending asyn. messages public delegate void delegateReaderEventNotification(MSG_READER_EVENT_NOTIFICATION msg); public delegate void delegateRoAccessReport(MSG_RO_ACCESS_REPORT msg); public delegate void delegateKeepAlive(MSG_KEEPALIVE msg); //Delegates for sending encapsulated asyn. messages public delegate void delegateEncapReaderEventNotification(ENCAPED_READER_EVENT_NOTIFICATION msg); public delegate void delegateEncapRoAccessReport(ENCAPED_RO_ACCESS_REPORT msg); public delegate void delegateEncapKeepAlive(ENCAPED_KEEP_ALIVE msg); [Serializable] public class ClientManualResetEvent { public ManualResetEvent evt; public byte[] data; public UInt32 msg_id; public ClientManualResetEvent(bool status) { evt = new ManualResetEvent(status); } } //add comments public class LLRPClient : IDisposable { #region Network Parameters private CommunicationInterface cI; private int LLRP_TCP_PORT = 5084; private int MSG_TIME_OUT = 10000; #endregion #region Private Members private ManualResetEvent conn_evt; private ENUM_ConnectionAttemptStatusType conn_status_type; private string reader_name; #endregion public event delegateReaderEventNotification OnReaderEventNotification; public event delegateRoAccessReport OnRoAccessReportReceived; public event delegateKeepAlive OnKeepAlive; public event delegateEncapReaderEventNotification OnEncapedReaderEventNotification; public event delegateEncapRoAccessReport OnEncapedRoAccessReportReceived; public event delegateEncapKeepAlive OnEncapedKeepAlive; protected void TriggerReaderEventNotification(MSG_READER_EVENT_NOTIFICATION msg) { try { if (OnReaderEventNotification != null) OnReaderEventNotification(msg); if (OnEncapedReaderEventNotification != null) { ENCAPED_READER_EVENT_NOTIFICATION ntf = new ENCAPED_READER_EVENT_NOTIFICATION(); ntf.reader = reader_name; ntf.ntf = msg; } } catch { } } protected void TriggerRoAccessReport(MSG_RO_ACCESS_REPORT msg) { try { if (OnRoAccessReportReceived != null) OnRoAccessReportReceived(msg); if (OnEncapedRoAccessReportReceived != null) { ENCAPED_RO_ACCESS_REPORT report = new ENCAPED_RO_ACCESS_REPORT(); report.reader = reader_name; report.report = msg; OnEncapedRoAccessReportReceived(report); } } catch { } } protected void TriggerKeepAlive(MSG_KEEPALIVE msg) { try { if (OnKeepAlive != null) OnKeepAlive(msg); if (OnEncapedKeepAlive != null) { ENCAPED_KEEP_ALIVE keepalive = new ENCAPED_KEEP_ALIVE(); keepalive.reader = reader_name; keepalive.keep_alive = msg; OnEncapedKeepAlive(keepalive); } } catch { } } #region Properties public string ReaderName { get { return reader_name; } } #endregion #region Assistance Functions public void SetMessageTimeOut(int time_out) { this.MSG_TIME_OUT = time_out; } public int GetMessageTimeOut() { return MSG_TIME_OUT; } #endregion #region Private Events ClientManualResetEvent _event_CUSTOM_MESSAGE; ClientManualResetEvent _event_GET_READER_CAPABILITIES; ClientManualResetEvent _event_GET_READER_CAPABILITIES_RESPONSE; ClientManualResetEvent _event_ADD_ROSPEC; ClientManualResetEvent _event_ADD_ROSPEC_RESPONSE; ClientManualResetEvent _event_DELETE_ROSPEC; ClientManualResetEvent _event_DELETE_ROSPEC_RESPONSE; ClientManualResetEvent _event_START_ROSPEC; ClientManualResetEvent _event_START_ROSPEC_RESPONSE; ClientManualResetEvent _event_STOP_ROSPEC; ClientManualResetEvent _event_STOP_ROSPEC_RESPONSE; ClientManualResetEvent _event_ENABLE_ROSPEC; ClientManualResetEvent _event_ENABLE_ROSPEC_RESPONSE; ClientManualResetEvent _event_DISABLE_ROSPEC; ClientManualResetEvent _event_DISABLE_ROSPEC_RESPONSE; ClientManualResetEvent _event_GET_ROSPECS; ClientManualResetEvent _event_GET_ROSPECS_RESPONSE; ClientManualResetEvent _event_ADD_ACCESSSPEC; ClientManualResetEvent _event_ADD_ACCESSSPEC_RESPONSE; ClientManualResetEvent _event_DELETE_ACCESSSPEC; ClientManualResetEvent _event_DELETE_ACCESSSPEC_RESPONSE; ClientManualResetEvent _event_ENABLE_ACCESSSPEC; ClientManualResetEvent _event_ENABLE_ACCESSSPEC_RESPONSE; ClientManualResetEvent _event_DISABLE_ACCESSSPEC; ClientManualResetEvent _event_DISABLE_ACCESSSPEC_RESPONSE; ClientManualResetEvent _event_GET_ACCESSSPECS; ClientManualResetEvent _event_GET_ACCESSSPECS_RESPONSE; ClientManualResetEvent _event_GET_READER_CONFIG; ClientManualResetEvent _event_GET_READER_CONFIG_RESPONSE; ClientManualResetEvent _event_SET_READER_CONFIG; ClientManualResetEvent _event_SET_READER_CONFIG_RESPONSE; ClientManualResetEvent _event_CLOSE_CONNECTION; ClientManualResetEvent _event_CLOSE_CONNECTION_RESPONSE; ClientManualResetEvent _event_GET_REPORT; ClientManualResetEvent _event_RO_ACCESS_REPORT; ClientManualResetEvent _event_KEEPALIVE; ClientManualResetEvent _event_KEEPALIVE_ACK; ClientManualResetEvent _event_READER_EVENT_NOTIFICATION; ClientManualResetEvent _event_ENABLE_EVENTS_AND_REPORTS; ClientManualResetEvent _event_ERROR_MESSAGE; #endregion #region Methods public LLRPClient() { cI = new TCPIPClient(); } public bool Open(string llrp_reader_name, int timeout, out ENUM_ConnectionAttemptStatusType status) { reader_name = llrp_reader_name; status = ENUM_ConnectionAttemptStatusType.Failed_Reason_Other_Than_A_Connection_Already_Exists; cI.OnMessageReceived += new delegateMessageReceived(ProcesssMessage); try { cI.Open(llrp_reader_name, LLRP_TCP_PORT); } catch { cI.OnMessageReceived -= new delegateMessageReceived(ProcesssMessage); return false; } conn_evt = new ManualResetEvent(false); if (conn_evt.WaitOne(timeout, false)) { status = conn_status_type; if (status == ENUM_ConnectionAttemptStatusType.Success) return true; } reader_name = llrp_reader_name; try { cI.Close(); cI.OnMessageReceived -= new delegateMessageReceived(ProcesssMessage); } catch { } return false; } public bool Close() { try { MSG_CLOSE_CONNECTION msg = new MSG_CLOSE_CONNECTION(); MSG_ERROR_MESSAGE msg_err; MSG_CLOSE_CONNECTION_RESPONSE rsp = this.CLOSE_CONNECTION(msg, out msg_err, MSG_TIME_OUT); if (rsp == null || rsp.LLRPStatus.StatusCode != ENUM_StatusCode.M_Success) return false; cI.Close(); cI.OnMessageReceived -= new delegateMessageReceived(ProcesssMessage); return true; } catch { return false; } } public void Dispose() { this.Close(); } private void ProcesssMessage(Int16 ver, Int16 msg_type, Int32 msg_id, byte[] data) { BitArray bArr; int cursor = 0; int length; switch ((ENUM_LLRP_MSG_TYPE)msg_type) { case ENUM_LLRP_MSG_TYPE.CUSTOM_MESSAGE: _event_CUSTOM_MESSAGE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_CUSTOM_MESSAGE.data, data.Length); _event_CUSTOM_MESSAGE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_READER_CAPABILITIES: _event_GET_READER_CAPABILITIES.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_READER_CAPABILITIES.data, data.Length); _event_GET_READER_CAPABILITIES.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_READER_CAPABILITIES_RESPONSE: _event_GET_READER_CAPABILITIES_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_READER_CAPABILITIES_RESPONSE.data, data.Length); _event_GET_READER_CAPABILITIES_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ADD_ROSPEC: _event_ADD_ROSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ADD_ROSPEC.data, data.Length); _event_ADD_ROSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ADD_ROSPEC_RESPONSE: _event_ADD_ROSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ADD_ROSPEC_RESPONSE.data, data.Length); _event_ADD_ROSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DELETE_ROSPEC: _event_DELETE_ROSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DELETE_ROSPEC.data, data.Length); _event_DELETE_ROSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DELETE_ROSPEC_RESPONSE: _event_DELETE_ROSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DELETE_ROSPEC_RESPONSE.data, data.Length); _event_DELETE_ROSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.START_ROSPEC: _event_START_ROSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_START_ROSPEC.data, data.Length); _event_START_ROSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.START_ROSPEC_RESPONSE: _event_START_ROSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_START_ROSPEC_RESPONSE.data, data.Length); _event_START_ROSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.STOP_ROSPEC: _event_STOP_ROSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_STOP_ROSPEC.data, data.Length); _event_STOP_ROSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.STOP_ROSPEC_RESPONSE: _event_STOP_ROSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_STOP_ROSPEC_RESPONSE.data, data.Length); _event_STOP_ROSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ENABLE_ROSPEC: _event_ENABLE_ROSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ENABLE_ROSPEC.data, data.Length); _event_ENABLE_ROSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ENABLE_ROSPEC_RESPONSE: _event_ENABLE_ROSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ENABLE_ROSPEC_RESPONSE.data, data.Length); _event_ENABLE_ROSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DISABLE_ROSPEC: _event_DISABLE_ROSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DISABLE_ROSPEC.data, data.Length); _event_DISABLE_ROSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DISABLE_ROSPEC_RESPONSE: _event_DISABLE_ROSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DISABLE_ROSPEC_RESPONSE.data, data.Length); _event_DISABLE_ROSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_ROSPECS: _event_GET_ROSPECS.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_ROSPECS.data, data.Length); _event_GET_ROSPECS.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_ROSPECS_RESPONSE: _event_GET_ROSPECS_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_ROSPECS_RESPONSE.data, data.Length); _event_GET_ROSPECS_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ADD_ACCESSSPEC: _event_ADD_ACCESSSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ADD_ACCESSSPEC.data, data.Length); _event_ADD_ACCESSSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ADD_ACCESSSPEC_RESPONSE: _event_ADD_ACCESSSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ADD_ACCESSSPEC_RESPONSE.data, data.Length); _event_ADD_ACCESSSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DELETE_ACCESSSPEC: _event_DELETE_ACCESSSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DELETE_ACCESSSPEC.data, data.Length); _event_DELETE_ACCESSSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DELETE_ACCESSSPEC_RESPONSE: _event_DELETE_ACCESSSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DELETE_ACCESSSPEC_RESPONSE.data, data.Length); _event_DELETE_ACCESSSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ENABLE_ACCESSSPEC: _event_ENABLE_ACCESSSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ENABLE_ACCESSSPEC.data, data.Length); _event_ENABLE_ACCESSSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ENABLE_ACCESSSPEC_RESPONSE: _event_ENABLE_ACCESSSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ENABLE_ACCESSSPEC_RESPONSE.data, data.Length); _event_ENABLE_ACCESSSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DISABLE_ACCESSSPEC: _event_DISABLE_ACCESSSPEC.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DISABLE_ACCESSSPEC.data, data.Length); _event_DISABLE_ACCESSSPEC.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.DISABLE_ACCESSSPEC_RESPONSE: _event_DISABLE_ACCESSSPEC_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_DISABLE_ACCESSSPEC_RESPONSE.data, data.Length); _event_DISABLE_ACCESSSPEC_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_ACCESSSPECS: _event_GET_ACCESSSPECS.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_ACCESSSPECS.data, data.Length); _event_GET_ACCESSSPECS.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_ACCESSSPECS_RESPONSE: _event_GET_ACCESSSPECS_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_ACCESSSPECS_RESPONSE.data, data.Length); _event_GET_ACCESSSPECS_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_READER_CONFIG: _event_GET_READER_CONFIG.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_READER_CONFIG.data, data.Length); _event_GET_READER_CONFIG.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_READER_CONFIG_RESPONSE: _event_GET_READER_CONFIG_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_READER_CONFIG_RESPONSE.data, data.Length); _event_GET_READER_CONFIG_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.SET_READER_CONFIG: _event_SET_READER_CONFIG.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_SET_READER_CONFIG.data, data.Length); _event_SET_READER_CONFIG.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.SET_READER_CONFIG_RESPONSE: _event_SET_READER_CONFIG_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_SET_READER_CONFIG_RESPONSE.data, data.Length); _event_SET_READER_CONFIG_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.CLOSE_CONNECTION: _event_CLOSE_CONNECTION.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_CLOSE_CONNECTION.data, data.Length); _event_CLOSE_CONNECTION.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.CLOSE_CONNECTION_RESPONSE: _event_CLOSE_CONNECTION_RESPONSE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_CLOSE_CONNECTION_RESPONSE.data, data.Length); _event_CLOSE_CONNECTION_RESPONSE.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.GET_REPORT: _event_GET_REPORT.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_GET_REPORT.data, data.Length); _event_GET_REPORT.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.RO_ACCESS_REPORT: try { bArr = Util.ConvertByteArrayToBitArray(data); length = bArr.Count; MSG_RO_ACCESS_REPORT rpt = MSG_RO_ACCESS_REPORT.FromBitArray(ref bArr, ref cursor, length); delegateRoAccessReport roaccess = new delegateRoAccessReport(TriggerRoAccessReport); roaccess.BeginInvoke(rpt, null, null); } catch { } break; case ENUM_LLRP_MSG_TYPE.KEEPALIVE: try { bArr = Util.ConvertByteArrayToBitArray(data); length = bArr.Count; MSG_KEEPALIVE msg = MSG_KEEPALIVE.FromBitArray(ref bArr, ref cursor, length); delegateKeepAlive rMsg = new delegateKeepAlive(TriggerKeepAlive); rMsg.BeginInvoke(msg, null, null); } catch { } break; case ENUM_LLRP_MSG_TYPE.KEEPALIVE_ACK: _event_KEEPALIVE_ACK.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_KEEPALIVE_ACK.data, data.Length); _event_KEEPALIVE_ACK.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.READER_EVENT_NOTIFICATION: try { bArr = Util.ConvertByteArrayToBitArray(data); length = bArr.Count; MSG_READER_EVENT_NOTIFICATION ntf = MSG_READER_EVENT_NOTIFICATION.FromBitArray(ref bArr, ref cursor, length); if (conn_evt != null && ntf.ReaderEventNotificationData.ConnectionAttemptEvent != null) { conn_status_type = ntf.ReaderEventNotificationData.ConnectionAttemptEvent.Status; conn_evt.Set(); } else { delegateReaderEventNotification rEvent = new delegateReaderEventNotification(TriggerReaderEventNotification); rEvent.BeginInvoke(ntf, null, null); } } catch { } break; case ENUM_LLRP_MSG_TYPE.ENABLE_EVENTS_AND_REPORTS: _event_ENABLE_EVENTS_AND_REPORTS.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ENABLE_EVENTS_AND_REPORTS.data, data.Length); _event_ENABLE_EVENTS_AND_REPORTS.evt.Set(); break; case ENUM_LLRP_MSG_TYPE.ERROR_MESSAGE: _event_ERROR_MESSAGE.data = new byte[data.Length]; if (data.Length > 0) Array.Copy(data, _event_ERROR_MESSAGE.data, data.Length); _event_ERROR_MESSAGE.evt.Set(); break; default: break; } } #endregion public MSG_CUSTOM_MESSAGE CUSTOM_MESSAGE(MSG_CUSTOM_MESSAGE msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_CUSTOM_MESSAGE = new ClientManualResetEvent(false); _event_CUSTOM_MESSAGE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_CUSTOM_MESSAGE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_CUSTOM_MESSAGE.data); length = bArr.Count; MSG_CUSTOM_MESSAGE msg_rsp = MSG_CUSTOM_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_GET_READER_CAPABILITIES_RESPONSE GET_READER_CAPABILITIES(MSG_GET_READER_CAPABILITIES msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_GET_READER_CAPABILITIES_RESPONSE = new ClientManualResetEvent(false); _event_GET_READER_CAPABILITIES_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_GET_READER_CAPABILITIES_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_GET_READER_CAPABILITIES_RESPONSE.data); length = bArr.Count; MSG_GET_READER_CAPABILITIES_RESPONSE msg_rsp = MSG_GET_READER_CAPABILITIES_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_ADD_ROSPEC_RESPONSE ADD_ROSPEC(MSG_ADD_ROSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_ADD_ROSPEC_RESPONSE = new ClientManualResetEvent(false); _event_ADD_ROSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_ADD_ROSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_ADD_ROSPEC_RESPONSE.data); length = bArr.Count; MSG_ADD_ROSPEC_RESPONSE msg_rsp = MSG_ADD_ROSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_DELETE_ROSPEC_RESPONSE DELETE_ROSPEC(MSG_DELETE_ROSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_DELETE_ROSPEC_RESPONSE = new ClientManualResetEvent(false); _event_DELETE_ROSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_DELETE_ROSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_DELETE_ROSPEC_RESPONSE.data); length = bArr.Count; MSG_DELETE_ROSPEC_RESPONSE msg_rsp = MSG_DELETE_ROSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_START_ROSPEC_RESPONSE START_ROSPEC(MSG_START_ROSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_START_ROSPEC_RESPONSE = new ClientManualResetEvent(false); _event_START_ROSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_START_ROSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_START_ROSPEC_RESPONSE.data); length = bArr.Count; MSG_START_ROSPEC_RESPONSE msg_rsp = MSG_START_ROSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_STOP_ROSPEC_RESPONSE STOP_ROSPEC(MSG_STOP_ROSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_STOP_ROSPEC_RESPONSE = new ClientManualResetEvent(false); _event_STOP_ROSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_STOP_ROSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_STOP_ROSPEC_RESPONSE.data); length = bArr.Count; MSG_STOP_ROSPEC_RESPONSE msg_rsp = MSG_STOP_ROSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_ENABLE_ROSPEC_RESPONSE ENABLE_ROSPEC(MSG_ENABLE_ROSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_ENABLE_ROSPEC_RESPONSE = new ClientManualResetEvent(false); _event_ENABLE_ROSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_ENABLE_ROSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_ENABLE_ROSPEC_RESPONSE.data); length = bArr.Count; MSG_ENABLE_ROSPEC_RESPONSE msg_rsp = MSG_ENABLE_ROSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_DISABLE_ROSPEC_RESPONSE DISABLE_ROSPEC(MSG_DISABLE_ROSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_DISABLE_ROSPEC_RESPONSE = new ClientManualResetEvent(false); _event_DISABLE_ROSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_DISABLE_ROSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_DISABLE_ROSPEC_RESPONSE.data); length = bArr.Count; MSG_DISABLE_ROSPEC_RESPONSE msg_rsp = MSG_DISABLE_ROSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_GET_ROSPECS_RESPONSE GET_ROSPECS(MSG_GET_ROSPECS msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_GET_ROSPECS_RESPONSE = new ClientManualResetEvent(false); _event_GET_ROSPECS_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_GET_ROSPECS_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_GET_ROSPECS_RESPONSE.data); length = bArr.Count; MSG_GET_ROSPECS_RESPONSE msg_rsp = MSG_GET_ROSPECS_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_ADD_ACCESSSPEC_RESPONSE ADD_ACCESSSPEC(MSG_ADD_ACCESSSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_ADD_ACCESSSPEC_RESPONSE = new ClientManualResetEvent(false); _event_ADD_ACCESSSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_ADD_ACCESSSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_ADD_ACCESSSPEC_RESPONSE.data); length = bArr.Count; MSG_ADD_ACCESSSPEC_RESPONSE msg_rsp = MSG_ADD_ACCESSSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_DELETE_ACCESSSPEC_RESPONSE DELETE_ACCESSSPEC(MSG_DELETE_ACCESSSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_DELETE_ACCESSSPEC_RESPONSE = new ClientManualResetEvent(false); _event_DELETE_ACCESSSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_DELETE_ACCESSSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_DELETE_ACCESSSPEC_RESPONSE.data); length = bArr.Count; MSG_DELETE_ACCESSSPEC_RESPONSE msg_rsp = MSG_DELETE_ACCESSSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_ENABLE_ACCESSSPEC_RESPONSE ENABLE_ACCESSSPEC(MSG_ENABLE_ACCESSSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_ENABLE_ACCESSSPEC_RESPONSE = new ClientManualResetEvent(false); _event_ENABLE_ACCESSSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_ENABLE_ACCESSSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_ENABLE_ACCESSSPEC_RESPONSE.data); length = bArr.Count; MSG_ENABLE_ACCESSSPEC_RESPONSE msg_rsp = MSG_ENABLE_ACCESSSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_DISABLE_ACCESSSPEC_RESPONSE DISABLE_ACCESSSPEC(MSG_DISABLE_ACCESSSPEC msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_DISABLE_ACCESSSPEC_RESPONSE = new ClientManualResetEvent(false); _event_DISABLE_ACCESSSPEC_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_DISABLE_ACCESSSPEC_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_DISABLE_ACCESSSPEC_RESPONSE.data); length = bArr.Count; MSG_DISABLE_ACCESSSPEC_RESPONSE msg_rsp = MSG_DISABLE_ACCESSSPEC_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_GET_ACCESSSPECS_RESPONSE GET_ACCESSSPECS(MSG_GET_ACCESSSPECS msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_GET_ACCESSSPECS_RESPONSE = new ClientManualResetEvent(false); _event_GET_ACCESSSPECS_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_GET_ACCESSSPECS_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_GET_ACCESSSPECS_RESPONSE.data); length = bArr.Count; MSG_GET_ACCESSSPECS_RESPONSE msg_rsp = MSG_GET_ACCESSSPECS_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_GET_READER_CONFIG_RESPONSE GET_READER_CONFIG(MSG_GET_READER_CONFIG msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_GET_READER_CONFIG_RESPONSE = new ClientManualResetEvent(false); _event_GET_READER_CONFIG_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_GET_READER_CONFIG_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_GET_READER_CONFIG_RESPONSE.data); length = bArr.Count; MSG_GET_READER_CONFIG_RESPONSE msg_rsp = MSG_GET_READER_CONFIG_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_SET_READER_CONFIG_RESPONSE SET_READER_CONFIG(MSG_SET_READER_CONFIG msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_SET_READER_CONFIG_RESPONSE = new ClientManualResetEvent(false); _event_SET_READER_CONFIG_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_SET_READER_CONFIG_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_SET_READER_CONFIG_RESPONSE.data); length = bArr.Count; MSG_SET_READER_CONFIG_RESPONSE msg_rsp = MSG_SET_READER_CONFIG_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public MSG_CLOSE_CONNECTION_RESPONSE CLOSE_CONNECTION(MSG_CLOSE_CONNECTION msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; //Add your code here _event_CLOSE_CONNECTION_RESPONSE = new ClientManualResetEvent(false); _event_CLOSE_CONNECTION_RESPONSE.msg_id = msg.MSG_ID; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); WaitHandle[] waitHandles = new WaitHandle[] { _event_CLOSE_CONNECTION_RESPONSE.evt, _event_ERROR_MESSAGE.evt }; bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); int wait_result = WaitHandle.WaitAny(waitHandles, time_out, false); int cursor = 0; int length; BitArray bArr; try { switch (wait_result) { case 0: bArr = Util.ConvertByteArrayToBitArray(_event_CLOSE_CONNECTION_RESPONSE.data); length = bArr.Count; MSG_CLOSE_CONNECTION_RESPONSE msg_rsp = MSG_CLOSE_CONNECTION_RESPONSE.FromBitArray(ref bArr, ref cursor, length); if (msg_rsp.MSG_ID != msg.MSG_ID) return null; else return msg_rsp; case 1: bArr = Util.ConvertByteArrayToBitArray(_event_ERROR_MESSAGE.data); length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return null; default: return null; } } catch { return null; } } public void GET_REPORT(MSG_GET_REPORT msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); bool wait_result = _event_ERROR_MESSAGE.evt.WaitOne(time_out, false); if (wait_result) { BitArray bArr = Util.ConvertByteArrayToBitArray(_event_ENABLE_EVENTS_AND_REPORTS.data); int cursor = 0; int length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return; } } public void KEEPALIVE_ACK(MSG_KEEPALIVE_ACK msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); bool wait_result = _event_ERROR_MESSAGE.evt.WaitOne(time_out, false); if (wait_result) { BitArray bArr = Util.ConvertByteArrayToBitArray(_event_ENABLE_EVENTS_AND_REPORTS.data); int cursor = 0; int length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return; } } public void ENABLE_EVENTS_AND_REPORTS(MSG_ENABLE_EVENTS_AND_REPORTS msg, out MSG_ERROR_MESSAGE msg_err, int time_out) { msg_err = null; _event_ERROR_MESSAGE = new ClientManualResetEvent(false); bool[] bit_array = msg.ToBitArray(); byte[] data = Util.ConvertBitArrayToByteArray(bit_array); cI.Send(data); bool wait_result = _event_ERROR_MESSAGE.evt.WaitOne(time_out, false); if (wait_result) { BitArray bArr = Util.ConvertByteArrayToBitArray(_event_ENABLE_EVENTS_AND_REPORTS.data); int cursor = 0; int length = bArr.Count; msg_err = MSG_ERROR_MESSAGE.FromBitArray(ref bArr, ref cursor, length); return; } } } }