void CleanUp() { try { Disposing(); LogUtility.LogUtility.LogFile(Convert.ToString(m_Id) + " *****************************destroying all******************************", LogUtility.LogLevels.LEVEL_LOG_HIGH); m_NonProprietarySegmentRxBuf = null; m_ProprietarySementRxBuf = null; if (m_clientStream != null) { m_clientStream.Clear(); m_clientStream = null; } m_ProprietarySegmentTxMutex = null; m_ProprietarySegmentRxMutex = null; m_NonProprietarySegmentRxMutex = null; m_NonProprietarySegmentTxMutex = null; if (m_clientTxQueue != null) { m_clientTxQueue.Clear(); m_clientTxQueue = null; } if (m_destinationTxQueue != null) { m_destinationTxQueue.Clear(); m_destinationTxQueue = null; } m_txStateMachine = null; m_rxStateMachine = null; m_destinationSideSocket = null; m_clientSideSocket = null; LogUtility.LogUtility.LogFile("ID " + Convert.ToString(m_Id) + " m_TransmittedClient " + Convert.ToString(m_TransmittedClient) + " ReceivedClient " + Convert.ToString(m_ReceivedClient) + " TransmittedServer " + Convert.ToString(m_TransmittedServer) + " ReceivedServer " + Convert.ToString(m_ReceivedServer) + " TransmittedMsgsClient " + Convert.ToString(m_TransmittedMsgsClient) + " ReceivedMsgs " + Convert.ToString(m_ReceivedMsgs) + " SubmittedMsgsClient " + Convert.ToString(m_SubmittedMsgsClient) + " SubmittedMsgsServer " + Convert.ToString(m_SubmittedMsgsServer) + " SubmittedClient " + Convert.ToString(m_SubmittedClient) + " SubmittedServer " + Convert.ToString(m_SubmittedServer) + " Saved " + GetSaved() + " PreSaved " + GetPreSaved() + " PostSaved " + GetPostSaved(), LogUtility.LogLevels.LEVEL_LOG_HIGH); LogUtility.LogUtility.LogFile("ID " + Convert.ToString(m_Id) + " Timestampts: prop tx init " + GetHMSM(m_ProprietaryTxInitiatedTs) + " prop tx compl " + GetHMSM(m_ProprietaryTxCompletedTs) + " prop rx init " + GetHMSM(m_ProprietaryRxInitiatedTs) + " prop rx compl " + GetHMSM(m_ProprietaryRxCompletedTs) + " nonprop tx init " + GetHMSM(m_NonProprietaryTxInitiatedTs) + " nonprop tx compl " + GetHMSM(m_NonProprietaryTxCompletedTs) + " nonprop rx init " + GetHMSM(m_NonProprietaryRxInitiatedTs) + " nonprop rx compl " + GetHMSM(m_NonProprietaryRxCompletedTs), LogUtility.LogLevels.LEVEL_LOG_HIGH3); LogUtility.LogUtility.LogFile("ID " + Convert.ToString(m_Id) + " Flags: prop tx " + Convert.ToString(m_ProprietarySegmentTxInProgress) + " prop rx " + Convert.ToString(m_ProprietarySegmentRxInProgress) + " nonprop tx " + Convert.ToString(m_NonProprietarySegmentTxInProgress) + " nonprop rx " + Convert.ToString(m_NonProprietarySegmentRxInProgress), LogUtility.LogLevels.LEVEL_LOG_HIGH3); Disposed(); m_disposeMutex = null; } catch (Exception exc) { LogUtility.LogUtility.LogFile(Convert.ToString(m_Id) + " EXCEPTION " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH); } }
public Proxy() { #if false m_clientTxQueue = new Queue(); m_destinationTxQueue = new Queue(); #else m_clientTxQueue = new LinkedList <byte[]>(); m_destinationTxQueue = new LinkedList <byte[]>(); m_clientTxQueueMutex = new object(); m_destinationTxQueueMutex = new object(); #endif //ProprietarySegmentTxMutex = new Mutex(); //NonProprietarySegmentTxMutex = new Mutex(); //ProprietarySegmentRxMutex = new Mutex(); //NonProprietarySegmentRxMutex = new Mutex(); m_ProprietarySegmentTxMutex = new object(); m_NonProprietarySegmentTxMutex = new object(); m_ProprietarySegmentRxMutex = new object(); m_NonProprietarySegmentRxMutex = new object(); m_clientStreamMutex = new object(); m_destinationStreamMutex = new object(); m_disposeMutex = new object(); m_ProprietarySegmentTxInProgress = false; m_ProprietarySegmentRxInProgress = false; m_NonProprietarySegmentTxInProgress = false; m_NonProprietarySegmentRxInProgress = false; m_IsMsgBeingTransmitted2Client = false; m_IsMsgBeingTransmitted2Destination = false; m_NonProprietarySegmentRxBuf = new byte[8192 * 4]; m_ProprietarySementRxBuf = new byte[8192 * 4]; m_rxStateMachine = new RxStateMachine(m_Id); m_txStateMachine = new TxStateMachine(m_Id); m_OnNonProprietaryReceivedCbk = new SocketAsyncEventArgs(); m_OnNonProprietaryTransmittedCbk = new SocketAsyncEventArgs(); m_OnProprietaryReceivedCbk = new SocketAsyncEventArgs(); m_OnProprietaryTransmittedCbk = new SocketAsyncEventArgs(); m_OnNonProprietaryReceivedCbk.Completed += new EventHandler <SocketAsyncEventArgs>(OnNonProprietarySegmentReceived); m_OnNonProprietaryTransmittedCbk.Completed += new EventHandler <SocketAsyncEventArgs>(OnNonProprietarySegmentTransmitted); m_OnProprietaryReceivedCbk.Completed += new EventHandler <SocketAsyncEventArgs>(OnProprietarySegmentReceived); m_OnProprietaryTransmittedCbk.Completed += new EventHandler <SocketAsyncEventArgs>(OnProprietarySegmentTransmitted); m_ShutDownFlag = false; m_TransmittedClient = 0; m_ReceivedClient = 0; m_TransmittedServer = 0; m_ReceivedServer = 0; m_TransmittedMsgsClient = 0; m_ReceivedMsgs = 0; m_SubmittedMsgsClient = 0; m_SubmittedMsgsServer = 0; m_SubmittedClient = 0; m_SubmittedServer = 0; m_Saved = 0; m_clientStream = new MyMemoryStream.MyMemoryStream(); m_destinationStream = new MyMemoryStream.MyMemoryStream(); m_onGotResults = null; m_onDisposed = null; m_clientSideDiscAsyncArgs = new SocketAsyncEventArgs(); m_clientSideDiscAsyncArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnClientDisconnected); m_ServerSideDiscAsyncArgs = new SocketAsyncEventArgs(); m_ServerSideDiscAsyncArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnDestinationDisconnected); m_InfiniteWaitTs = new TimeSpan(0, 0, 0, 0, -1); m_ImmediateReturnTs = new TimeSpan(0, 0, 0, 0, 0); m_ProprietaryRxInitiatedTs = new DateTime(); m_ProprietaryRxCompletedTs = new DateTime(); m_ProprietaryTxInitiatedTs = new DateTime(); m_ProprietaryTxCompletedTs = new DateTime(); m_NonProprietaryRxInitiatedTs = new DateTime(); m_NonProprietaryRxCompletedTs = new DateTime(); m_NonProprietaryTxInitiatedTs = new DateTime(); m_NonProprietaryTxCompletedTs = new DateTime(); LogUtility.LogUtility.LogFile("Started at " + DateTime.Now.ToLongTimeString(), LogUtility.LogLevels.LEVEL_LOG_HIGH); }
private int[] GetPacket() { int?[] inputBuffer = new int?[180]; int inputBufferLength = 0; RxStateMachine rxState = RxStateMachine.WAITING; int? length = 0; int cnt = 0; int? checksum = 0; bool escaped = false; Log.Verbose("XBEE: Get Packet"); while (!_closeHandler) { int?val = _serialPort.Read(); if (val == null) { // Timeout continue; } if (inputBufferLength >= inputBuffer.Length) { // If we overrun the buffer, reset and go to WAITING mode inputBufferLength = 0; rxState = RxStateMachine.WAITING; Log.Debug("XBEE RX buffer overrun - resetting!"); } //Log.Debug($"RX XBEE: {{{string.Format("0x{0:X2} {1:C}", val, val)}}}"); if (escaped) { escaped = false; val = val ^ XBEE_XOR; } else if (val == XBEE_ESCAPE) { escaped = true; continue; } switch (rxState) { case RxStateMachine.WAITING: { if (val == XBEE_FLAG) { rxState = RxStateMachine.RECEIVE_LEN1; } } continue; case RxStateMachine.RECEIVE_LEN1: { inputBuffer[cnt++] = val; rxState = RxStateMachine.RECEIVE_LEN2; length += val << 8; } break; case RxStateMachine.RECEIVE_LEN2: { inputBuffer[cnt++] = val; rxState = RxStateMachine.RECEIVE_DATA; length += val + 3; if (length > inputBuffer.Length) { // Return null and let the system resync by searching for the next FLAG Log.Debug($"XBEE RX length too long ({length}) - ignoring!"); return(null); } } break; case RxStateMachine.RECEIVE_DATA: { checksum += val; inputBuffer[cnt++] = val; } break; default: break; } if (cnt == length) { if ((checksum & 0xff) == 255) { int?[] tempArray = new int?[180]; Array.Copy(inputBuffer, tempArray, length != null ? length.Value : 0); return(tempArray.Where(value => value != null).Select(value => value.Value).ToArray()); } else { return(null); } } } return(null); }