private TCounter SetWaitFlag(EMessage msg, int timeout) // set the wait flag of a request message at given timeout milliseconds { var tc = new TCounter(msg, timeout); lock (dictMsgId2TC) dictMsgId2TC[msg.ID] = tc; return(tc); }
private void _processInMessage(object msgObj) // async method { var msg = msgObj as EMessage; try { // pre-processing PreprocessInMessage(ref msg); logger.Write(LogType.IN, msg); if (msg.HasFlag(StatusCode.Response)) { TCounter tc = null; lock (dictMsgId2TC) { dictMsgId2TC.TryGetValue(msg.ID, out tc); } if (tc != null) { tc.SetReply(msg); RemoveWaitFlag(msg.ID); ProcessResponse(tc.RequestMsg, tc.ResponseMsg); } } if (msg.HasFlag(StatusCode.Request)) { ProcessRequest(ref msg); if (!msg.HasFlag(StatusCode.NoAutoReply)) { Response(msg); } } } catch (Exception ex) { this.Catch(new EOCException(ex)); } }