Пример #1
0
        public void run(IDataSet dataSet)
        {
            IStreamObj roleObj = dataSet.getData(JObjectType.create_role);

            if (null == roleObj)
            {
                JLog.Error("JProcessorCreateRole.run roleObj is null.");
                return;
            }
            JCreateRoleReqObject createRoleReqObj = roleObj as JCreateRoleReqObject;

            if (null == createRoleReqObj)
            {
                JLog.Error("JProcessorCreateRole.run createRoleReqObj is null.");
                return;
            }

            try {
                JNetworkDataOperator.SendDataToServer(JPacketType.pt_createRole_req, createRoleReqObj);
                JLogicUserData.setLocalData(createRoleReqObj);
            } catch (Exception e) {
                JLog.Debug("JProcessorCreateRole 发送数据失败");
                JLog.Error("JProcessorCreateRole 发送数据失败 " + e.Message);
                return;
            }
        }
            /// <summary>
            /// Takes the send data.
            /// </summary>
            /// <returns>The send data. wait failed will return null</returns>
            /// <param name="millisecondsTimeout">Milliseconds timeout. <0 wait always</param>
            public static List <JNetworkData> TakeSendData(int millisecondsTimeout)
            {
                if (millisecondsTimeout < 0)
                {
                    if (!_sendSemaphore.WaitOne())
                    {
                        return(null);
                    }
                }
                else
                {
                    if (!_sendSemaphore.WaitOne(millisecondsTimeout))
                    {
                        return(null);
                    }
                }

                List <JNetworkData> listData = new List <JNetworkData> ();

                try{
                    lock (_sendLocker) {
                        while (JNetworkInteractiveData.SendData.Data.Count > 0)
                        {
                            listData.Add(JNetworkInteractiveData.SendData.Data.Dequeue());
                        }
                    }
                }
                catch (Exception e) {
                    JLog.Error("TakeSendData:" + e.Message, JGame.Log.JLogCategory.Network);
                }

                JLog.Debug("JNetworkDataOperator.TakeSendData : take all send data count:"
                           + listData.Count.ToString(), JGame.Log.JLogCategory.Network);
                return(listData);
            }
        public void Initialize(string serverIP, int serverPort)
        {
            if (_initialized)
            {
                JLog.Error("JClientSocketManager initialized aready !", JGame.Log.JLogCategory.Network);
                return;
            }
            JNetworkServerInfo.ServerIP   = serverIP;
            JNetworkServerInfo.ServerPort = serverPort;
            IPAddress  serverAdress = IPAddress.Parse(serverIP);
            IPEndPoint serverEdp    = new IPEndPoint(serverAdress, serverPort);

            JClientSocket.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            JNetworkInteractiveData.ReceivedData = new JNetworkDataQueue();
            JNetworkInteractiveData.SendData     = new JNetworkDataQueue();

            try
            {
                JClientSocket.socket.Connect(serverEdp);
                JLog.Info("Connect to server success.", JGame.Log.JLogCategory.Network);

                JClientDataSenderThread.Initialize();
                JClientDataReceiverThread.Initialize();
            }
            catch (Exception e) {
                JLog.Error(e.Message, JGame.Log.JLogCategory.Network);
                return;
            }
        }
Пример #4
0
        private bool CheckRoleNameIsValud(JMySqlAccess mysql, string account, string roleName, ref int ErrorType)
        {
            string strSql =
                string.Format("select * from {0} where user_account = '{1}' and role_name = '{2}'",
                              JDBUtil.TableName_Server_RoleInfo,
                              account,
                              roleName);

            try
            {
                DataSet dataset = mysql.Select(strSql);
                if (null == dataset || null == dataset.Tables)
                {
                    ErrorType = (int)JCreateRoleRetObject.CreateRoleResultType.failed;
                    return(false);
                }
                if (dataset.Tables.Count > 0 && dataset.Tables[0].Rows.Count > 0)
                {
                    ErrorType = (int)JCreateRoleRetObject.CreateRoleResultType.RoleNameRepeated;
                    return(false);
                }
            }
            catch (Exception e) {
                JLog.Error("CheckRoleNameIsValud." + e.Message);
                return(false);
            }

            return(true);
        }
Пример #5
0
 private bool CreateRole(JMySqlAccess mysql, string account, string roleName, int roleType, ref string roleId, ref int ErrorType)
 {
     try
     {
         string resultMssage = "";
         bool   inserResult  = mysql.DoSql(
             string.Format("INSERT into  {0}  ( role_name, user_account, role_type, scene_id)  VALUES( '{1}' , '{2}' , {3} ,  {4} );",
                           JDBUtil.TableName_Server_RoleInfo,
                           roleName,
                           account,
                           roleType,
                           JDBUtil.TableValue_SenceID_Default), ref resultMssage);
         JLog.Info("resultMssage");
         if (inserResult)
         {
             ErrorType = (int)JCreateRoleRetObject.CreateRoleResultType.successed;
             JLog.Debug("Create role success, account: " + account + " roleName:" + roleName + " roleType:" + roleType);
             return(true);
         }
         else
         {
             ErrorType = (int)JCreateRoleRetObject.CreateRoleResultType.failed;
             JLog.Debug("Create role falied, account: " + account + " roleName:" + roleName + " roleType:" + roleType);
             return(false);
         }
     }
     catch (Exception e) {
         JLog.Error(e.Message);
         ErrorType = (int)JCreateRoleRetObject.CreateRoleResultType.failed;
         return(false);
     }
 }
Пример #6
0
            public static bool registerProcessor(JPacketType packetType, IProcesser processor, bool isServerProcessor = false)
            {
                if (IsServer && !isServerProcessor || !IsServer && isServerProcessor)
                {
                    return(true);
                }

                bool bSuccess = false;

                try
                {
                    _readerWriteLocker.EnterWriteLock();

                    if (!JLogicRegisteredProcessors.processors.PacketTypeToProcessor.ContainsKey(packetType))
                    {
                        JLogicRegisteredProcessors.processors.PacketTypeToProcessor.Add(packetType, processor);
                        bSuccess = true;
                    }
                }
                catch (Exception e) {
                    JLog.Error("JLogicHelper.RegisterProcessor error message:" + e.Message);
                }
                finally {
                    _readerWriteLocker.ExitWriteLock();
                }

                return(bSuccess);
            }
Пример #7
0
            public static IProcesser getProcessor(JPacketType packetType)
            {
                IProcesser processor = null;

                try
                {
                    _readerWriteLocker.EnterReadLock();

                    if (JLogicRegisteredProcessors.processors.PacketTypeToProcessor.ContainsKey(packetType))
                    {
                        processor = (IProcesser)JLogicRegisteredProcessors.processors.PacketTypeToProcessor[packetType];
                    }
                }
                catch (Exception e) {
                    JLog.Error("JLogicHelper.RegisterProcessor error message:" + e.Message);
                }
                finally {
                    _readerWriteLocker.ExitReadLock();
                }

                if (null == processor)
                {
                    JLog.Error("JLogicHelper.RegisterProcessor: Unregistered packet type:" + packetType.GetDescription());
                }

                return(processor);
            }
Пример #8
0
        public void run(IDataSet dataSet)
        {
            IStreamObj obj = dataSet.getData(JObjectType.create_role_ret);

            if (null == obj || null == (obj as JCreateRoleRetObject))
            {
                JLog.Error("JProcesserCreateRoleRet : obj is empty!");
            }

            if ((obj as JCreateRoleRetObject).Result != JCreateRoleRetObject.CreateRoleResultType.successed)
            {
                JLog.Info("Received JCreateRoleRetObject create failed:!" + (obj as JCreateRoleRetObject).Result.GetDescription());
            }
            //todo:...remind to regist
            else if (null != createRole)
            {
                IStreamObj createRoleObjTemp = JLogicUserData.getLocalData().getData(JObjectType.create_role);
                if (null == createRoleObjTemp)
                {
                    return;
                }
                JCreateRoleReqObject createRoleObj = createRoleObjTemp as JCreateRoleReqObject;
                if (null == createRoleObj)
                {
                    return;
                }
                createRole(createRoleObj.RoleName, createRoleObj.RoleType);
            }
        }
        public static void MainLoop()
        {
            if (null == JClientSocket.socket)
            {
                JLog.Error("JClientDataReceiverThread.MainLoop JClientSocket.socket is null, please make sure JClientSocketManager is initialized. ", JGame.Log.JLogCategory.Network);
                return;
            }
            while (true)
            {
                if (_requireEnd)
                {
                    break;
                }

                if (JClientSocket.socket.Available <= 0)
                {
                    Thread.Sleep(100);
                    continue;
                }

                byte[] buffer = new byte[JTcpDefines.max_buffer_size];
                int    recLen = JClientSocket.socket.Receive(buffer);
                if (recLen > 0)
                {
                    JNetworkDataOperator.ReceiveData(recLen, buffer, JClientSocket.socket.RemoteEndPoint);
                }
                else
                {
                    //说明socket已经断开连接
                }
            }
        }
            public static List <JNetworkData> TakeReceivedData()
            {
                List <JNetworkData> listData = new List <JNetworkData> ();

                if (!_receivedSemaphore.WaitOne(1))
                {
                    return(listData);
                }

                try{
                    lock (_receiveLocker) {
                        JLog.Debug("JNetworkDataOperator.TakeReceivedData : take all received data count:"
                                   + JNetworkInteractiveData.ReceivedData.Data.Count.ToString(),
                                   JGame.Log.JLogCategory.Network);
                        while (JNetworkInteractiveData.ReceivedData.Data.Count > 0)
                        {
                            listData.Add(JNetworkInteractiveData.ReceivedData.Data.Dequeue());
                        }
                    }
                }
                catch (Exception e) {
                    JLog.Error("TakeSendData:" + e.Message, JGame.Log.JLogCategory.Network);
                }

                return(listData);
            }
Пример #11
0
        /*private byte[] KeepAliveTime
         * {
         *      get
         *      {
         *              uint dummy = 0;
         *              byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
         *              BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
         *              BitConverter.GetBytes((uint)5000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
         *              BitConverter.GetBytes((uint)5000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
         *              return inOptionValues;
         *      }
         * }
         * private const int keepAlive = -1744830460;
         * private byte[] inValue = new byte[] { 1, 0, 0, 0, 0x20, 0x4e, 0, 0, 0xd0, 0x07, 0, 0 };
         * byte[] inValue = new byte[] { 1, 0, 0, 0, 0x10, 0x27, 0, 0, 0xe8, 0x03, 0, 0 }; // True, 10秒, 1 秒
         * JServerSocket.socket.IOControl(keepAlive, inValue, null);
         * JServerSocket.socket.IOControl(IOControlCode.KeepAliveValues, inValue, null);*/

        public void Initialize(string serverIP, int serverPort)
        {
            if (_initialized)
            {
                JLog.Error("JServerSocketManager initialized aready !", JGame.Log.JLogCategory.Network);
                return;
            }

            JLog.Info("JServerSocketManager begin to initialize :", JGame.Log.JLogCategory.Network);

            _socketHeartDelayTime         = new Dictionary <Socket, ulong> ();
            _heartbeatLocker              = new object();
            JNetworkServerInfo.ServerIP   = serverIP;
            JNetworkServerInfo.ServerPort = serverPort;
            _socketLocker = new object();
            _semaphore    = new Semaphore(0, 10000);
            JNetworkInteractiveData.ReceivedData = new JNetworkDataQueue();
            JNetworkInteractiveData.SendData     = new JNetworkDataQueue();
            IPAddress  ip_server  = IPAddress.Parse(serverIP);
            IPEndPoint server_edp = new IPEndPoint(ip_server, serverPort);

            JServerSocket.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                JServerSocket.socket.Bind(server_edp);
                JLog.Info("JServerSocketManager server socket bind to server endpoint finished.\nIP:" + serverIP + "\nPort:" + serverPort.ToString(),
                          JGame.Log.JLogCategory.Network);

                JServerSocket.socket.Listen(JTcpDefines.max_tcp_connect);
                JLog.Info("JServerSocketManager server socket begin listen", JGame.Log.JLogCategory.Network);

                _serverSendThread = new Thread(SendLoop)
                {
                    IsBackground = true
                };
                _serverSendThread.Start();

                _serverReceiveThread = new Thread(ReceiveLoop)
                {
                    IsBackground = true
                };
                _serverReceiveThread.Start();

                _serverAcceptThread = new Thread(AcceptLoop)
                {
                    IsBackground = true
                };
                _serverAcceptThread.Start();
            }
            catch (Exception e) {
                JLog.Error("JServerSocketManager initialize faield  error message: " + e.Message, JGame.Log.JLogCategory.Network);
                return;
            }

            //start heart beat check
            _headbeatTimer          = new System.Timers.Timer(1000);
            _headbeatTimer.Elapsed += heatbeatTest;
            _headbeatTimer.Start();
        }
Пример #12
0
        private void AcceptLoop()
        {
            JLog.Info("JServerSocketManager server accept loop started", JGame.Log.JLogCategory.Network);

            while (true)
            {
                //JLog.Debug("AcceptLoop loop one begin ...", JGame.Log.JLogCategory.Network);

                if (_forceEnd)
                {
                    break;
                }

                try
                {
                    JLog.Debug("JServerSocketManager.AcceptLoop begin to accept", JGame.Log.JLogCategory.Network);
                    Socket currentConnectedSocket = JServerSocket.socket.Accept();
                    JLog.Debug("JServerSocketManager.AcceptLoop accept finished, to process accepted socket", JGame.Log.JLogCategory.Network);
                    if (null != currentConnectedSocket && currentConnectedSocket.Connected)
                    {
                        lock (_socketLocker)
                        {
                            if (!JConnectedClientSocket.sockets.Contains(currentConnectedSocket))
                            {
                                JConnectedClientSocket.sockets.Add(currentConnectedSocket);

                                JLog.Info("JServerSocketManager.AcceptLoop client connected :" +
                                          (currentConnectedSocket.RemoteEndPoint as IPEndPoint).Address.ToString(), JGame.Log.JLogCategory.Network);
                                _semaphore.Release();
                            }
                            else
                            {
                                JLog.Info("JServerSocketManager.AcceptLoop connected client connected again"
                                          + (currentConnectedSocket.RemoteEndPoint as IPEndPoint).Address.ToString(), JGame.Log.JLogCategory.Network);
                            }
                        }

                        lock (_heartbeatLocker)
                        {
                            if (!_socketHeartDelayTime.ContainsKey(currentConnectedSocket))
                            {
                                _socketHeartDelayTime.Add(currentConnectedSocket, 0);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    JLog.Error("JServerSocketManager accept loop error message:" + e.Message, JGame.Log.JLogCategory.Network);
                    Thread.Sleep(200);
                }

                //JLog.Debug("AcceptLoop loop one end ...", JGame.Log.JLogCategory.Network);
            }

            JLog.Info("JServerSocketManager server accept loop end.", JGame.Log.JLogCategory.Network);
        }
Пример #13
0
 protected bool SendToServer(JObjAccountRegisterReq obj)
 {
     try {
         JNetworkDataOperator.SendDataToServer(JPacketType.npt_accountRegister_req, obj);
         return(true);
     } catch (Exception e) {
         JLog.Debug("发送数据失败");
         JLog.Error(e.Message);
         return(false);
     }
 }
Пример #14
0
 protected bool SendToServer(JObj_SignIn obj)
 {
     try {
         JNetworkDataOperator.SendData(JPacketType.npt_signin_req, obj);
         return(true);
     } catch (Exception e) {
         JLog.Debug("发送数据失败");
         JLog.Error(e.Message);
         return(false);
     }
 }
 public void ShutDown()
 {
     _forceEnd = true;
     try
     {
         JServerSocket.socket.Close();
     }
     catch (Exception e) {
         JLog.Error(e.Message, JGame.Log.JLogCategory.Network);
     }
 }
Пример #16
0
        public void run(IDataSet dataSet)
        {
            IStreamObj obj = dataSet.getData(JObjectType.account_register_ret);

            if (null == obj || null == (obj as JObjAccountRegisterRet))
            {
                JLog.Error("JProcessorAccountRegisterRet : obj is empty!");
            }
            else
            if (null != registerRetGot)
            {
                registerRetGot((obj as JObjAccountRegisterRet).Result);
            }
        }
 public static void addData(JPacketType type, IStreamObj obj)
 {
     try
     {
         JLogicUserData.Data.setData(obj);
         lock (_locker)
         {
             JLocalDataProcessors.Data.Enqueue(type);
         }
         _semaphore.Release();
     }
     catch (Exception e) {
         JLog.Error("JLocalDataHelper: addData " + e.Message);
     }
 }
Пример #18
0
    public void CreateRoleButtonClicked()
    {
        JCreateRoleReqObject obj = new JCreateRoleReqObject();

        //ToDo:检测是否合法
        obj.RoleName = RoleName.text;
        obj.RoleType = CreatePlayerUtil.type;
        try {
            JLocalDataHelper.addData(JPacketType.pt_createRole_req, obj);
            return;
        } catch (Exception e) {
            Debug.LogError("发送数据失败");
            JLog.Error(e.Message);
            return;
        }
    }
Пример #19
0
        public DataSet Select(string sql)
        {
            if (!Connected)
            {
                return(null);
            }

            try
            {
                return(QuerySet(sql));
            }
            catch (Exception e)
            {
                JLog.Error("Select SQL:" + sql + "error message:" + e.Message.ToString());
                return(null);
            }
        }
        public static void MainLoop()
        {
            if (null == JNetworkInteractiveData.SendData ||
                null == JNetworkInteractiveData.SendData.Data)
            {
                JLog.Error("JNetworkDataSenderThread: JNetworkInteractiveData checked empty, please check initialize", JGame.Log.JLogCategory.Network);
                return;
            }

            if (null == JClientSocket.socket)
            {
                JLog.Error("JNetworkDataSenderThread: JClientSocket.socket is null, please check initialize", JGame.Log.JLogCategory.Network);
                return;
            }

            JLog.Info("JNetworkDataSenderThread: main loop started", JGame.Log.JLogCategory.Network);

            while (true)
            {
                if (_requireEnd)
                {
                    break;
                }

                try
                {
                    List <JNetworkData> dataList = JNetworkDataOperator.TakeSendData(1000);
                    if (null == dataList)
                    {
                        continue;
                    }

                    foreach (JNetworkData data in dataList)
                    {
                        JClientSocket.socket.Send(data.Data);
                        JLog.Debug("JNetworkDataSenderThread: send one network packet", JGame.Log.JLogCategory.Network);
                    }
                }
                catch (Exception e) {
                    JLog.Error(e.Message, JGame.Log.JLogCategory.Network);
                }
            }

            JLog.Info("JNetworkDataSenderThread main loop end.", JGame.Log.JLogCategory.Network);
        }
Пример #21
0
        public override void run(IDataSet dataSet)
        {
            IStreamObj obj = dataSet.getData(JObjectType.sign_in_ret);

            if (null == obj || null == (obj as JObj_SignRet))
            {
                JLog.Error("JProcesserSignInGet : obj is empty!");
            }

            if ((obj as JObj_SignRet).Result == true)
            {
                //todo:...
                if (null != toSignIn)
                {
                    toSignIn();
                }
            }
        }
            public static JPacketType GetNetworkPacketType(JNetworkData data)
            {
                if (null == data)
                {
                    return(JPacketType.npt_unknown);
                }

                try
                {
                    JInputStream inputStream = new JInputStream(data.Data);
                    return((JPacketType)inputStream.Reader.ReadInt16());
                }
                catch (Exception e) {
                    JLog.Error("JNetworkHelper.JPacketType error message :" + e.Message);
                }

                return(JPacketType.npt_unknown);
            }
Пример #23
0
        private void SendLoop()
        {
            JLog.Info("JServerSocketManager server send loop started", JGame.Log.JLogCategory.Network);

            while (true)
            {
                if (_forceEnd)
                {
                    break;
                }
                List <JNetworkData> dataList = JNetworkDataOperator.TakeSendData(1000);
                if (null == dataList)
                {
                    continue;
                }

                foreach (JNetworkData data in dataList)
                {
                    lock (_socketLocker) {
                        foreach (Socket socket in JConnectedClientSocket.sockets)
                        {
                            if (null == socket || null == socket.RemoteEndPoint)
                            {
                                continue;
                            }

                            if (JNetworkHelper.IsSameEndpoint(data.RemoteEndPoint as IPEndPoint, socket.RemoteEndPoint as IPEndPoint))
                            {
                                try
                                {
                                    socket.Send(data.Data);
                                    JLog.Info("send one data to " + (socket.RemoteEndPoint as IPEndPoint).Address.ToString(), JGame.Log.JLogCategory.Network);
                                }
                                catch (Exception e) {
                                    JLog.Error("SendLoop error message:" + e.Message, JGame.Log.JLogCategory.Network);
                                }
                            }
                        }
                    }
                }
            }

            JLog.Info("JServerSocketManager server send loop end", JGame.Log.JLogCategory.Network);
        }
Пример #24
0
            public IStreamObj getData(JObjectType type)
            {
                IStreamObj obj = null;

                try
                {
                    _lock.AcquireReaderLock(-1);
                    if (_myData.ContainsKey((ushort)type))
                    {
                        obj = _myData [(ushort)type];
                    }
                }
                catch (Exception e) {
                    JLog.Error(e.Message);
                }
                finally{
                    _lock.ReleaseReaderLock();
                }
                return(obj);
            }
Пример #25
0
    // Update is called once per frame

    /*void Update () {
     *
     * }*/

    public void InitializeManagers()
    {
        IPAddress address = null;

        try
        {
            IPHostEntry hostEntry = Dns.GetHostEntry(ServerDomainName);
            address = hostEntry.AddressList [0];
        }
        catch (Exception e) {
            JLog.Error(e.Message, JGame.Log.JLogCategory.Network);
            return;
        }
        if (null == address)
        {
            return;
        }

        JGame.JGameManager.SingleInstance.initialize(IsServer, address.ToString(), ServerPort);
    }
Пример #26
0
        public void run(IDataSet dataSet)
        {
            IStreamObj obj = dataSet.getData(JObjectType.sign_in_ret);

            if (null == obj || null == (obj as JObj_SignRet))
            {
                JLog.Error("JProcesserSignInGet : obj is empty!");
            }

            if ((obj as JObj_SignRet).Result == false)
            {
                JLog.Info("Received JObj_SignRet but account and code is not registed!");
            }
            //todo:...remind to regist
            else if (null != toSignIn)
            {
                JLogicUserData.setLocalData(obj);
                toSignIn();
            }
        }
            public static void ReceiveData(int len, byte[] data, EndPoint remoteEndPoint)
            {
                JNetworkData networkData = new JNetworkData();

                networkData.Len            = len;
                networkData.Data           = data;
                networkData.RemoteEndPoint = remoteEndPoint;

                try
                {
                    lock (_receiveLocker)
                    {
                        JNetworkInteractiveData.ReceivedData.Data.Enqueue(networkData);
                        _receivedSemaphore.Release();
                    }
                    JLog.Debug("JNetworkDataOperator.ReceiveData : added one data to received data queue", JGame.Log.JLogCategory.Network);
                }
                catch (Exception e) {
                    JLog.Error("ReceiveData:" + e.Message, JGame.Log.JLogCategory.Network);
                }
            }
Пример #28
0
        public bool DoSql(string sql, ref string msg)
        {
            if (!Connected)
            {
                return(false);
            }

            try
            {
                MySqlCommand command = new MySqlCommand(sql, _mysql_connection);
                int          nCount  = command.ExecuteNonQuery();
                JLog.Debug("SQL:" + sql + "\nexectued effect lines:" + nCount.ToString());
            }
            catch (Exception e)
            {
                JLog.Error("SQL:" + sql + "error message:" + e.Message.ToString());
                return(false);
            }

            return(true);
        }
Пример #29
0
 public void setData(IStreamObj obj)
 {
     try
     {
         _lock.AcquireWriterLock(-1);
         if (!_myData.ContainsKey(obj.Type()))
         {
             _myData.Add(obj.Type(), obj);
         }
         else
         {
             _myData [obj.Type()] = obj;
         }
     }
     catch (Exception e) {
         JLog.Error(e.Message);
     }
     finally {
         _lock.ReleaseWriterLock();
     }
 }
        private void AcceptLoop()
        {
            JLog.Info("JServerSocketManager server accept loop started", JGame.Log.JLogCategory.Network);

            while (true)
            {
                //JLog.Debug("AcceptLoop loop one begin ...", JGame.Log.JLogCategory.Network);

                if (_forceEnd)
                {
                    break;
                }

                try
                {
                    Socket currentConnectedSocket = JServerSocket.socket.Accept();
                    if (null != currentConnectedSocket)
                    {
                        lock (_socketLocker)
                        {
                            if (!JConnectedClientSocket.sockets.Contains(currentConnectedSocket))
                            {
                                JConnectedClientSocket.sockets.Add(currentConnectedSocket);

                                JLog.Info("client connected :" + (currentConnectedSocket.RemoteEndPoint as IPEndPoint).Address.ToString(), JGame.Log.JLogCategory.Network);
                                _semaphore.Release();
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    JLog.Error("JServerSocketManager accept loop error message:" + e.Message, JGame.Log.JLogCategory.Network);
                }

                //JLog.Debug("AcceptLoop loop one end ...", JGame.Log.JLogCategory.Network);
            }

            JLog.Info("JServerSocketManager server accept loop end.", JGame.Log.JLogCategory.Network);
        }