Ejemplo n.º 1
0
            private void OnChatComing(ulong hSocket, tagChatRequestID chatRequestID, uint len)
            {
                uint        res;
                CSocketPeer sp = Seek(hSocket);

                if (sp == null)
                {
                    return;
                }
                sp.m_CurrReqID = (ushort)chatRequestID;
                CUQueue q = sp.m_qBuffer;

                q.SetSize(0);
                if (len > q.MaxBufferSize)
                {
                    q.Realloc(len);
                }
                unsafe
                {
                    fixed(byte *buffer = q.m_bytes)
                    {
                        res = ServerCoreLoader.RetrieveBuffer(hSocket, len, buffer, true);
                    }
                }
                System.Diagnostics.Debug.Assert(res == len);
                q.SetSize(res);
                sp.OnChatComing(chatRequestID);
            }
Ejemplo n.º 2
0
            private void OnSwitch(ulong hSocket, uint oldServiceId, uint newServiceId)
            {
                if (m_nMainThreads == uint.MaxValue)
                {
                    m_nMainThreads = ServerCoreLoader.GetMainThreads();
                }
                CBaseService bsOld;

                if (oldServiceId != BaseServiceID.sidStartup && (bsOld = SeekService(oldServiceId)) != null)
                {
                    bsOld.ReleasePeer(hSocket, false, newServiceId);
                }
                CBaseService bsNew = SeekService(newServiceId);

                if (bsNew != null)
                {
                    CSocketPeer sp = bsNew.CreatePeer(hSocket, newServiceId);
                    sp.m_bRandom = bsNew.ReturnRandom;
                    if (newServiceId == BaseServiceID.sidHTTP)
                    {
                        CHttpPeerBase hp = (CHttpPeerBase)sp;
                        hp.m_bHttpOk = false;
                    }
                    else
                    {
                        sp.m_os             = ServerCoreLoader.GetPeerOs(hSocket, ref sp.m_endian);
                        sp.m_qBuffer.OS     = sp.m_os;
                        sp.m_qBuffer.Endian = sp.m_endian;
                    }
                    sp.OnSwitch(oldServiceId);
                }
            }
Ejemplo n.º 3
0
    protected override void OnClose(ulong hSocket, int nError)
    {
        CBaseService bs = CBaseService.SeekService(hSocket);

        if (bs != null)
        {
            CSocketPeer sp = bs.Seek(hSocket);
            // ......
        }
    }
Ejemplo n.º 4
0
            private void OnChatCame(ulong hSocket, tagChatRequestID chatRequestId)
            {
                CSocketPeer sp = Seek(hSocket);

                if (sp == null)
                {
                    return;
                }
                sp.OnCRCame(chatRequestId);
            }
Ejemplo n.º 5
0
            private void OnSRProcessed(ulong hSocket, ushort usRequestID)
            {
                CSocketPeer sp = Seek(hSocket);

                if (sp == null)
                {
                    return;
                }
                sp.OnSRProcessed(usRequestID);
            }
Ejemplo n.º 6
0
            private void OnResultsSent(ulong hSocket)
            {
                CSocketPeer sp = Seek(hSocket);

                if (sp == null)
                {
                    return;
                }
                sp.OnRSent();
            }
Ejemplo n.º 7
0
 private void ReleasePeer(ulong hSocket, bool bClosing, uint info)
 {
     lock (m_cs)
     {
         CSocketPeer found = m_lstPeer.Find(delegate(CSocketPeer sp) { return(sp.Handle == hSocket); });
         if (found != null)
         {
             found.m_qBuffer.SetSize(0);
             found.OnRelease(bClosing, info);
             m_lstPeer.Remove(found);
             m_lstDeadPeer.Add(found);
         }
     }
 }
Ejemplo n.º 8
0
            private void OnBaseCame(ulong hSocket, ushort reqId)
            {
                CSocketPeer sp = Seek(hSocket);

                if (sp == null)
                {
                    return;
                }
                if (m_svsId == BaseServiceID.sidHTTP && reqId == (ushort)tagBaseRequestID.idPing)
                {
                    CHttpPeerBase hp = (CHttpPeerBase)sp;
                    hp.m_vArg.Clear();
                    hp.m_WebRequestName = null;
                }
                sp.OnBRCame(reqId);
            }
Ejemplo n.º 9
0
            private bool OnHttpAuthentication(ulong hSocket, IntPtr userId, IntPtr password)
            {
                CSocketPeer sp = Seek(hSocket);

                if (sp == null)
                {
                    return(false);
                }
                CHttpPeerBase hp = (CHttpPeerBase)sp;

                unsafe
                {
                    string uid = new string((char *)userId);
                    string pwd = new string((char *)password);
                    hp.m_bHttpOk = hp.DoHttpAuth(uid, pwd);
                }
                return(hp.m_bHttpOk);
            }
Ejemplo n.º 10
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);
                }
            }
Ejemplo n.º 11
0
            private CSocketPeer CreatePeer(ulong hSocket, uint newServiceId)
            {
                CSocketPeer sp = null;

                lock (m_cs)
                {
                    if (m_lstDeadPeer.Count > 0)
                    {
                        sp = m_lstDeadPeer[0];
                        m_lstDeadPeer.RemoveAt(0);
                    }
                }
                if (sp == null)
                {
                    sp = GetPeerSocket();
                }
                sp.m_Service = this;
                sp.m_sh      = hSocket;
                lock (m_cs)
                {
                    m_lstPeer.Add(sp);
                }
                return(sp);
            }
Ejemplo n.º 12
0
 internal CHttpPushImpl(CSocketPeer sp)
 {
     m_sp = sp;
 }
Ejemplo n.º 13
0
 internal CHttpPushImpl(CSocketPeer sp)
 {
     m_sp = sp;
 }
Ejemplo n.º 14
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);
            }
Ejemplo n.º 15
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);
            }