void SessionList_OnSessionStart(HttpSession Sender) { RequestHandlersLock.AcquireReaderLock(-1); try { for (int i = 0; i < mRequestHandlers.Count; i++) { mRequestHandlers[i].SessionStart(Sender); } } finally { RequestHandlersLock.ReleaseReaderLock(); } }
protected override void DoCommand(ContextRFC context, HttpRequestInfo request, HttpResponseInfo response, ref bool handled) { // first raise events is user want to handle request by event switch (request.CommandType) { case HttpCommandEnum.Connect: if (OnCommandConnect != null) { OnCommandConnect(context, request, response, ref handled); } break; case HttpCommandEnum.Delete: if (OnCommandDelete != null) { OnCommandDelete(context, request, response, ref handled); } break; case HttpCommandEnum.Get: if (OnCommandGet != null) { OnCommandGet(context, request, response, ref handled); } break; case HttpCommandEnum.Head: if (OnCommandHead != null) { OnCommandHead(context, request, response, ref handled); } break; case HttpCommandEnum.Options: if (OnCommandOptions != null) { OnCommandOptions(context, request, response, ref handled); } break; case HttpCommandEnum.Post: if (OnCommandPost != null) { OnCommandPost(context, request, response, ref handled); } break; case HttpCommandEnum.Put: if (OnCommandPut != null) { OnCommandPut(context, request, response, ref handled); } break; case HttpCommandEnum.Trace: if (OnCommandTrace != null) { OnCommandTrace(context, request, response, ref handled); } break; default: if (OnCommandOther != null) { OnCommandOther(context, request, response, ref handled); } break; } // if request handled from an event handler skip request handlers if (handled) { return; } // try to handle request by request handlers collection RequestHandlersLock.AcquireReaderLock(-1); try { for (int i = 0; i < mRequestHandlers.Count && !handled; i++) { mRequestHandlers[i].HandleCommand(this, request, response, ref handled); } } finally { RequestHandlersLock.ReleaseReaderLock(); } }