예제 #1
0
        public void Start(IComServerParameter parameter)
        {
            Stop();

            mParameter           = parameter;
            mTcpSrv.ReceiveData += RPC.RPCNetworkMgr.Instance.ServerReceiveData;

            mRegisterConnect.ReceiveData += RPC.RPCNetworkMgr.Instance.ClientReceiveData;
            mRegisterConnect.NewConnect  += this.OnRegisterConnected;

            ServerFrame.DB.AsyncExecuteThreadManager.Instance.InitManager(2);
            ServerFrame.DB.AsyncExecuteThreadManager.Instance.StartThread();

            mRegisterConnect.Connect(parameter.RegServerIP, parameter.RegServerPort);
            mLinkState = ComServerState.WaitRegServer;

            this.UserRoleManager.DBConnect.OpenConnect();

            Log.FileLog.Instance.Begin("ComServer.log", false);
            Log.Log.Server.Print("ComServer Start!");
            Log.FileLog.Instance.Flush();
            IServer.LoadAllTemplateData(ServerCommon.ServerConfig.Instance.TemplatePath);
            ServerCommon.TemplateTableLoader.LoadTable(ServerCommon.ServerConfig.Instance.TablePath);

            this.UserRoleManager.DownloadPlanesData();
            this.UserRoleManager.DownloadRankData();
            this.UserRoleManager.RankInit();

            Com.GuildManager.Instance.Init();
            this.WolrdManager.Init(UserRoleManager.Planes.Values.ToArray());
        }
예제 #2
0
        void OnRegisterConnected(Iocp.TcpClient pClient, byte[] pData, int nLength)
        {
            if (nLength == 0)
            {
                return;
            }
            RPC.PackageWriter pkg = new RPC.PackageWriter();

            H_RPCRoot.smInstance.HGet_RegServer(pkg).RegComServer(pkg, mParameter.ListenIP, mParameter.ServerId);
            pkg.WaitDoCommand(mRegisterConnect, RPC.CommandTargetType.DefaultType, new System.Diagnostics.StackTrace(1, true)).OnFarCallFinished = delegate(RPC.PackageProxy _io, bool bTimeOut)
            {
                System.Diagnostics.Debug.WriteLine("公共信息通讯服务器({0})启动并且注册成功,可以等待位面服务器接入了", mParameter.ServerId);
                UInt16 listenPort = 0;
                _io.Read(out listenPort);
                mParameter.ListenPort = listenPort;

                if (mLinkState != ComServerState.Working)
                {
                    if (false == mTcpSrv.Open(Iocp.TcpOption.ForComServer, mParameter.ListenPort))
                    {
                        return;
                    }
                }

                mLinkState = ComServerState.Working;
            };
        }
예제 #3
0
        public void UnregisterComServer(string connectionName, string connectionId, string filename, string clsid)
        {
            EnsureValidClientConnection(connectionName, connectionId);

            ComServerState comServerState = new ComServerState(filename, clsid);
            Boolean        register       = false;

            StateManager.Current.Transition(connectionName, comServerState, register);
        }