示例#1
0
            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);
                }
            }
示例#2
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);
            }
示例#3
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);
            }