private void OnInitRequest(RequestState request) { try { Guid guid = Guid.NewGuid(); string peerId = guid.ToString(); if ((request.Context.Request.QueryString.Count < 1) || (request.Context.Request.QueryString[0] != "init")) { if (log.IsDebugEnabled) { log.DebugFormat("Received empty peer id", new object[0]); } RpcHttpHelper.SendErrorResponse(request.Context.Response, "Invalid rpc request"); request.AsyncResult.SetCompleted(null, false); } else { if (log.IsDebugEnabled) { log.DebugFormat("Received init request: pid={0}", new object[] { peerId }); } PhotonHttpPeer photonPeer = new PhotonHttpPeer(peerId, this, request.Context); if (!this.peerCache.TryAddPeer(photonPeer)) { if (log.IsWarnEnabled) { log.WarnFormat("Failed to create peer: pid={0}", new object[] { peerId }); } RpcHttpHelper.SendServerErrorResponse(request.Context.Response); } else { byte[] data = RpcHttpHelper.ReadRequest(request.Context.Request); this.photonApplication.OnInit(photonPeer, data, 1); if (photonPeer.Queue.Count == 0) { request.AsyncResult.SetCompleted(null, false); } else { byte[] buffer = photonPeer.Queue.Dequeue(); request.Context.Response.OutputStream.Write(guid.ToByteArray(), 0, 0x10); request.Context.Response.OutputStream.Write(buffer, 0, buffer.Length); request.AsyncResult.SetCompleted(null, false); } } } } catch (Exception exception) { log.Error(exception); } }
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { try { AsyncResult asyncCallback = new AsyncResult(cb, extraData); RequestState state = new RequestState(HttpContext.Current, asyncCallback); ThreadPool.QueueUserWorkItem(new WaitCallback(this.ProcessRequestCallBack), state); return(asyncCallback); } catch (Exception exception) { log.Error(exception); RpcHttpHelper.SendServerErrorResponse(context.Response); AsyncResult result2 = new AsyncResult(cb, extraData); result2.SetCompleted(null, true); return(result2); } }