Пример #1
0
            public virtual bool Run(uint port, uint maxBacklog, bool v6Supported)
            {
                if (!OnSettingServer())
                {
                    return(false);
                }
                Type type = GetType();

                FieldInfo[] fis = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.GetField | BindingFlags.Static);
                foreach (FieldInfo fi in fis)
                {
                    ServiceAttr[] sas = (ServiceAttr[])fi.GetCustomAttributes(typeof(ServiceAttr), true);
                    if (sas != null && sas.Length > 0)
                    {
                        CBaseService bs = (CBaseService)fi.GetValue(this);
                        if (!bs.AddMe(sas[0].ServiceID, sas[0].ThreadApartment))
                        {
                            throw new InvalidOperationException("Failed in registering service = " + sas[0].ServiceID + ", and check if the service ID is duplicated with the previous one or if the service ID is less or equal to SocketProAdapter.BaseServiceID.sidReserved");
                        }
                    }
                }
                bool ok = ServerCoreLoader.StartSocketProServer(port, maxBacklog, v6Supported);

                CBaseService.m_nMainThreads = uint.MaxValue;
                return(ok);
            }
Пример #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);
                }
            }
Пример #3
0
    protected override void OnClose(ulong hSocket, int nError)
    {
        CBaseService bs = CBaseService.SeekService(hSocket);

        if (bs != null)
        {
            CSocketPeer sp = bs.Seek(hSocket);
            // ......
        }
    }