private void OnFast(ulong hSocket, ushort usRequestID, uint len) { CSocketPeer sp = Seek(hSocket); if (sp == null) { return; } try { if (sp.SvsID == BaseServiceID.sidHTTP) { ((CHttpPeerBase)sp).OnHttpRequestArrive(usRequestID, (uint)sp.m_qBuffer.GetSize()); } else { CClientPeer cp = (CClientPeer)sp; if (!cp.m_dicDel.ContainsKey(usRequestID)) { if (sp is CClientPeer) { ((CClientPeer)sp).OnFast(usRequestID, len); } else { ServerCoreLoader.SendExceptionResult(hSocket, "Request not registered at server side", Environment.StackTrace, usRequestID, 0); } } else { object[] args = new object[] { cp.m_dicDel[usRequestID] }; object res = m_dicMethod[usRequestID].Invoke(cp, args); res = null; } } } catch (Exception ex) { ServerCoreLoader.SendExceptionResult(hSocket, ex.Message, ex.StackTrace, usRequestID, 0); } }
private int OnSlow(ushort usRequestID, uint len, ulong hSocket) { CSocketPeer sp = Seek(hSocket); if (sp == null) { return(0); } try { if (sp.SvsID == BaseServiceID.sidHTTP) { return(((CHttpPeerBase)sp).OnHttpRequestArrive(usRequestID, (uint)sp.m_qBuffer.GetSize())); } else { CClientPeer cp = (CClientPeer)sp; if (!cp.m_dicDel.ContainsKey(usRequestID)) { if (sp is CClientPeer) { return(((CClientPeer)sp).OnSlow(usRequestID, len)); } ServerCoreLoader.SendExceptionResult(hSocket, "Request not registered at server side", Environment.StackTrace, usRequestID, uint.MaxValue); return(0); } else { object[] args = new object[] { cp.m_dicDel[usRequestID] }; object res = m_dicMethod[usRequestID].Invoke(cp, args); res = null; } } } catch (TargetInvocationException tie) { if (tie.InnerException == null) { ServerCoreLoader.SendExceptionResult(hSocket, tie.Message, tie.StackTrace, usRequestID, uint.MaxValue); } else if (tie.InnerException is CServerError) { CServerError ex = (CServerError)tie.InnerException; ushort req_id = ex.ReqId; if (req_id == 0) { req_id = usRequestID; } int index = ex.StackTrace.IndexOf("at SocketProAdapter.ServerSide.CClientPeer"); string stack = ex.StackTrace.Substring(0, index).Trim(); ServerCoreLoader.SendExceptionResult(hSocket, ex.Message, stack, req_id, (uint)ex.ErrCode); } else { Exception ex = tie.InnerException; ServerCoreLoader.SendExceptionResult(hSocket, ex.Message, ex.StackTrace, usRequestID, uint.MaxValue); } } catch (CServerError ex) { ushort req_id = ex.ReqId; if (req_id == 0) { req_id = usRequestID; } int index = ex.StackTrace.IndexOf("at SocketProAdapter.ServerSide.CClientPeer"); string stack = ex.StackTrace.Substring(0, index).Trim(); ServerCoreLoader.SendExceptionResult(hSocket, ex.Message, stack, req_id, (uint)ex.ErrCode); } catch (Exception ex) { ServerCoreLoader.SendExceptionResult(hSocket, ex.Message, ex.StackTrace, usRequestID, uint.MaxValue); } return(0); }
private void OnReqArrive(ulong hSocket, ushort usRequestID, uint len) { CSocketPeer sp = Seek(hSocket); if (sp == null) { return; } sp.m_CurrReqID = usRequestID; CUQueue q = sp.m_qBuffer; q.SetSize(0); if (len > q.MaxBufferSize) { q.Realloc(len); } if (len > 0) { uint res; unsafe { fixed(byte *buffer = q.m_bytes) { if (m_nMainThreads <= 1) { CUQueue.CopyMemory(buffer, (void *)ServerCoreLoader.GetRequestBuffer(hSocket), len); res = len; } else { res = ServerCoreLoader.RetrieveBuffer(hSocket, len, buffer, false); } } } System.Diagnostics.Debug.Assert(res == len); q.SetSize(res); } if (m_svsId != BaseServiceID.sidHTTP) { q.OS = sp.m_os; q.Endian = sp.m_endian; if ((tagBaseRequestID)usRequestID == tagBaseRequestID.idInterrupt) { CClientPeer cp = (CClientPeer)sp; ulong options; q.Load(out options); cp.OnIntNotified(options); return; } } else { CHttpPeerBase hp = (CHttpPeerBase)sp; hp.m_WebRequestName = null; hp.m_vArg.Clear(); if (usRequestID == (ushort)tagHttpRequestID.idUserRequest) { uint count; sbyte[] reqName; q.Load(out reqName); hp.m_WebRequestName = CUQueue.ToString(reqName); q.Load(out count); for (uint n = 0; n < count; ++n) { object arg; q.Load(out arg); hp.m_vArg.Add(arg); } } } sp.OnRArrive(usRequestID, len); }