Beispiel #1
0
        /*
         * public string TestAutoCode(CSCommon.Data.RoleDetail obj)
         * {
         *  Type objType = obj.GetType();
         *  object[] propsTab = objType.GetCustomAttributes(typeof(DBBindTable), false);
         *  if (propsTab == null)
         *      return null;
         *  DBBindTable bindTab = propsTab[0] as DBBindTable;
         *  System.Reflection.PropertyInfo[] props = objType.GetProperties();
         *  bool first = true;
         *  string result = "";
         *  string temp = "            if (this.{name} != cmp.{name}) \r\n fields.Add(new KeyValuePair<string,object>(\"{name}\",{name})); \r\n";
         *  foreach (System.Reflection.PropertyInfo p in props)
         *  {
         *
         *      object[] attrs = p.GetCustomAttributes(typeof(DBBindField), true);
         *      if (attrs == null || attrs.Length == 0)
         *          continue;
         *      DBBindField dbBind = attrs[0] as DBBindField;
         *      if (dbBind == null)
         *          continue;
         *      result += temp.Replace("{name}", p.Name);
         *  }
         *  return result;
         * }*/


        public void Stop()
        {
            AsyncExecuteThreadManager.Instance.StopThread();

            Thread.AccountLoginThread.Instance.StopThread();
            Thread.PlayerEnterThread.Instance.StopThread();
            Thread.DBConnectManager.Instance.StopThreadPool();

            while (Thread.DBConnectManager.Instance.IsEmptyPool() == false)
            {
                System.Threading.Thread.Sleep(5);
            }

            mTcpSrv.ReceiveData          -= RPC.RPCNetworkMgr.Instance.ServerReceiveData;
            mTcpSrv.CloseConnect         -= this.ServerDisConnected;
            mRegisterConnect.ReceiveData -= RPC.RPCNetworkMgr.Instance.ClientReceiveData;
            mRegisterConnect.NewConnect  -= this.OnRegisterConnected;

            mRegisterConnect.Close();
            mTcpSrv.Close();
            mGateServers.Clear();
            System.Diagnostics.Debug.WriteLine("数据服务器关闭");
            mLinkState = DataServerState.None;

            Log.FileLog.Instance.End();
        }
Beispiel #2
0
        void OnRegisterConnected(Iocp.TcpClient pClient, byte[] pData, int nLength)
        {
            if (nLength == 0)
            {
                return;
            }
            RPC.PackageWriter pkg = new RPC.PackageWriter();
            //System.String[] ips = Iocp.TcpServer.GetHostIpAddress();
            //mParameter.ListenIP = mParameter.//SelectDataServerIP(ips);

            H_RPCRoot.smInstance.HGet_RegServer(pkg).RegDataServer(pkg, mParameter.ListenIP, mParameter.ListenPort, 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);

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

                mLinkState = DataServerState.Working;
            };
        }
Beispiel #3
0
        public void Start(IDataServerParameter parameter)
        {
            Stop();

            mParameter       = parameter;
            mDBLoaderConnect = new ServerFrame.DB.DBConnect();
            mDBLoaderConnect.OpenConnect();

            //ServerFrame.Support.ClassInfoManager.Instance.Load(false);

            Log.FileLog.Instance.Begin("DataServer.log", false);

            Log.Log.Server.Print("DataServer Start!");
            Log.FileLog.Instance.Flush();

            IServer.LoadAllTemplateData(ServerCommon.ServerConfig.Instance.TemplatePath);
            CSCommon.CSLog.LogFun = Log.Log.Common.Warning;
            ServerCommon.TemplateTableLoader.LoadTable(ServerCommon.ServerConfig.Instance.TablePath);

            //加载数据库中的静态配置信息
            CSCommon.Data.CDbConfig.LoadDbConfig(mDBLoaderConnect);

            //国战服务初始化
            CountryWar.CCountryWarMgr.Instance.Start(mDBLoaderConnect);


            Thread.AccountLoginThread.Instance.StartThread();
            Thread.PlayerEnterThread.Instance.StartThread();
            Thread.DBConnectManager.Instance.StartThreadPool(2);

            AsyncExecuteThreadManager.Instance.InitManager(1);
            AsyncExecuteThreadManager.Instance.StartThread();

            //mChargeManger = new Data.ChargeManager();

            mPlanesMgr = new Data.PlanesMgr(this);

            Log.Log.Server.Print("DBConnect OK!");

            mTcpSrv.ReceiveData          += RPC.RPCNetworkMgr.Instance.ServerReceiveData;
            mTcpSrv.CloseConnect         += this.ServerDisConnected;
            mRegisterConnect.ReceiveData += RPC.RPCNetworkMgr.Instance.ClientReceiveData;
            mRegisterConnect.NewConnect  += this.OnRegisterConnected;

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

            InitNamePool();

            mPlayerManager.DownloadPlayerData(mDBLoaderConnect);


            /*int avgSize = 0;
             * Support.PerfCounter perf = new Support.PerfCounter();
             * perf.Begin();
             * for (int i = 0; i < 1000; i++)
             * {
             *  RPC.DataWriter dw0 = new RPC.DataWriter();
             *  CSCommon.Data.ItemData item0 = new CSCommon.Data.ItemData();
             *  item0.ItemTemlateId = 2;
             *  //item0.DangrousReInitData();
             *  RPC.DataWriter dw1 = new RPC.DataWriter();
             *  CSCommon.Data.ItemData item1 = new CSCommon.Data.ItemData();
             *  item1.ItemTemlateId = 2;
             * // item1.DangrousReInitData();
             *  dw0.Write(item0);
             *  dw1.Write(item1);
             *
             *  int compressSize = dw1.CompressWithTemplate(dw0);
             *  dw1.UnCompressWithTemplate(dw0);
             *
             *  avgSize += compressSize;
             *
             *  RPC.DataWriter dw2 = new RPC.DataWriter();
             *  dw2.Write(item1);
             *  bool isSame = dw1.IsSame(dw2);
             * }
             * Int64 time = perf.End();
             * System.Diagnostics.Debug.WriteLine( "{0}:{1}" , avgSize / 1000, time);*/

            //test

            /*
             * var start = ServerCommon.IServer.timeGetTime();
             *
             * CSCommon.Data.RoleDetail rd = new CSCommon.Data.RoleDetail();
             * CSCommon.Data.RoleDetail rd2 = new CSCommon.Data.RoleDetail();
             * //var r = TestAutoCode(rd);
             * rd.BagSize = 155;
             * rd.BindRmb = 155;
             * rd.CreateTime = DateTime.Now;
             * rd.LocationX = 15211;
             * rd.LocationY = 15211;
             * rd.LocationZ = 15211;
             * rd.Rmb = 123;
             * rd.RoleExp = 333;
             * for (int i = 0; i < 10000; i++)
             * {
             *  //var r = rd.GetSql(rd2);
             *  var r = ServerFrame.DB.DBConnect.TestUpdateData("", rd, rd2);
             * }
             * var end = ServerCommon.IServer.timeGetTime() - start;
             * var t = end;*/
        }