/// <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) { try { if (logKeep != null) { logKeep.Dispose(); logKeep = null; } if ((logKeep = registerClient.getLog(logHandle)) != null) { Monitor.Enter(registerLock); try { foreach (IServer server in servers) { registerClient.appendLog(server.CreateServerLog(LogType.RegisterServer)); } } finally { Monitor.Exit(registerLock); } } else { registerClient._TcpClient_.Log.Error("TCP 注册服务客户端 " + serviceName.String.String + " 获取日志失败", LogLevel.Error | LogLevel.AutoCSer); } } catch (Exception error) { registerClient._TcpClient_.Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer); } } #endif }
/// <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 }