Beispiel #1
0
        /// <summary>
        /// 注册TCP服务端
        /// </summary>
        /// <param name="server"></param>
        /// <returns>是否注册成功</returns>
        internal bool Register(IServer server)
        {
#if NoAutoCSer
            throw new Exception();
#else
            ServerInfo serverInfo = server.CreateServerInfo();
            serverInfo.ClientIndex    = clientId.Index;
            serverInfo.ClientIdentity = clientId.Identity;
            Monitor.Enter(registerLock);
            try
            {
                checkRegisterClient();
                servers.Add(server);
                long tick = clientId.Tick;
                if (registerClient.register(tick, serverInfo).Value)
                {
                    server.TcpRegisterInfo  = serverInfo;
                    serverInfo.RegisterTick = tick;
                    return(true);
                }
            }
            catch (Exception error)
            {
                server.AddLog(error);
            }
            finally { Monitor.Exit(registerLock); }
#endif
            return(false);
        }
Beispiel #2
0
        /// <summary>
        /// TCP 客户端套接字初始化处理
        /// </summary>
        /// <param name="parameter"></param>
        private void onClientSocket(AutoCSer.Net.TcpServer.ClientSocketEventParameter parameter)
        {
            try
            {
                if (parameter.Type == AutoCSer.Net.TcpServer.ClientSocketEventParameter.EventType.SetSocket)
                {
                    try
                    {
                        if (logKeepCallback != null)
                        {
                            logKeepCallback.Dispose();
                            logKeepCallback = null;
                        }
#if NoAutoCSer
                        throw new Exception();
#else
                        ClientId        = TcpInternalClient.register();
                        logKeepCallback = TcpInternalClient.getLog(ClientId, onLog);
#endif
                        IsClient = true;
                        return;
                    }
                    catch (Exception error)
                    {
                        AutoCSer.Log.Pub.Log.Add(AutoCSer.Log.LogType.Error, error);
                        checkSocketVersion.DisposeSocket();
                    }
                    IsClient = false;
                }
            }
            finally
            {
                Client.OnClient(parameter.Type, name);
            }
        }
Beispiel #3
0
        /// <summary>
        /// TCP 客户端套接字初始化处理
        /// </summary>
        /// <param name="socket"></param>
        private void onClientSocket(AutoCSer.Net.TcpServer.ClientSocket socket)
        {
            Monitor.Enter(newSocketLock);
            try
            {
                if (socket.IsSocketVersion(ref this.socket))
                {
                    try
                    {
                        if (logKeepCallback != null)
                        {
                            logKeepCallback.Dispose();
                            logKeepCallback = null;
                        }
#if NoAutoCSer
                        throw new Exception();
#else
                        ClientId        = TcpInternalClient.register();
                        logKeepCallback = TcpInternalClient.getLog(ClientId, onLog);
#endif
                        IsClient = true;
                        Client.OnClient(name);
                        return;
                    }
                    catch (Exception error)
                    {
                        AutoCSer.Log.Pub.Log.add(AutoCSer.Log.LogType.Error, error);
                        socket.Socket.Dispose();
                    }
                    IsClient = false;
                }
            }
            finally { Monitor.Exit(newSocketLock); }
        }
Beispiel #4
0
        /// <summary>
        /// TCP 客户端套接字初始化处理
        /// </summary>
        /// <param name="parameter"></param>
        private void onNewSocket(TcpServer.ClientSocketEventParameter parameter)
        {
#if NoAutoCSer
            throw new Exception();
#else
            if (parameter.Type == TcpServer.ClientSocketEventParameter.EventType.SetSocket)
            {
                isClientErrorLog = false;
                do
                {
                    try
                    {
                        if (isClientErrorLog)
                        {
                            isClientErrorLog = false;
                            clientId.Tick    = 0;
                        }
                        if (clientId.Tick == 0)
                        {
                            clientId = registerClient.register();
                            if (clientId.Tick != 0)
                            {
                                createWait.Set();
                            }
                        }
                        if (clientId.Tick != 0)
                        {
                            if (logKeep != null)
                            {
                                logKeep.Dispose();
                                logKeep = null;
                            }
                            if (serverSets.Count != 0)
                            {
                                Monitor.Enter(serverSetLock);
                                try
                                {
                                    LeftArray <HashString> removeKeys = new LeftArray <HashString>(serverSets.Count);
                                    foreach (KeyValuePair <HashString, ClientServerSet> serverSet in serverSets)
                                    {
                                        if (serverSet.Value.Clear())
                                        {
                                            removeKeys.Add(serverSet.Key);
                                        }
                                    }
                                    foreach (HashString name in removeKeys)
                                    {
                                        serverSets.Remove(name);
                                    }
                                }
                                finally { Monitor.Exit(serverSetLock); }
                            }
                            isRegisterLoaded = false;
                            if ((logKeep = registerClient.getLog(clientId, logHandle)) != null)
                            {
                                byte isError = 0;
                                foreach (IServer server in servers)
                                {
                                    Monitor.Enter(registerLock);
                                    try
                                    {
                                        ServerInfo serverInfo = server.TcpRegisterInfo;
                                        long       clientTick = clientId.Tick;
                                        if (serverInfo != null && serverInfo.RegisterTick != clientTick)
                                        {
                                            serverInfo.ClientIndex    = clientId.Index;
                                            serverInfo.ClientIdentity = clientId.Identity;
                                            if (registerClient.checkRegister(clientTick, serverInfo).Value)
                                            {
                                                serverInfo.RegisterTick = clientTick;
                                            }
                                            else if (isError == 0)
                                            {
                                                isError = 1;
                                                if (registerClient.checkRegister(clientTick, serverInfo).Value)
                                                {
                                                    serverInfo.RegisterTick = clientTick;
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception error)
                                    {
                                        isError = 1;
                                        server.AddLog(error);
                                    }
                                    finally { Monitor.Exit(registerLock); }
                                }
                                return;
                            }
                        }
                    }
                    catch (Exception error)
                    {
                        registerClient._TcpClient_.Log.Add(AutoCSer.Log.LogType.Debug, error, null, true);
                    }
                    Thread.Sleep(registerClient._TcpClient_.TryCreateSleep);
                }while (registerClient._TcpClient_.IsDisposed == 0);
            }
#endif
        }