/// <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); }
/// <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); } }
/// <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); } }
/// <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 }