/// <summary> /// 添加TCP调用服务端 /// </summary> /// <param name="socket">TCP调用套接字</param> /// <param name="data">参数序列化数据</param> private void newServer(TmphSocket socket, TmphSubArray<byte> data) { try { var host = new TmphHost(); if (TmphDataDeSerializer.DeSerialize(data, ref host)) { TmphThreadPool.TinyPool.FastStart(server.newServerHandle, new TmphServerInfo { Socket = socket, Identity = socket.Identity, Host = host }, null, null); return; } } catch (Exception error) { TmphLog.Error.Add(error, null, true); } socket.SendStream(socket.Identity, new TmphAsynchronousMethod.TmphReturnValue { IsReturn = false }); }
/// <summary> /// 移除TCP调用服务端 /// </summary> /// <param name="socket">TCP调用套接字</param> /// <param name="data">参数序列化数据</param> private void removeServer(TmphSocket socket, TmphSubArray<byte> data) { try { var host = new TmphHost(); if (TmphDataDeSerializer.DeSerialize(data, ref host)) { socket.SendStream(socket.Identity, new TmphAsynchronousMethod.TmphReturnValue<bool> { IsReturn = true, Value = server.removeServer(host) }); return; } } catch (Exception error) { TmphLog.Error.Add(error, null, true); } socket.SendStream(socket.Identity, new TmphAsynchronousMethod.TmphReturnValue { IsReturn = false }); }
/// <summary> /// 添加TCP调用服务端 /// </summary> /// <param name="host">TCP调用服务端端口信息</param> /// <param name="onReturn">创建完成回调处理</param> public void NewServer(TmphHost host, Action<bool> onReturn) { try { TmphClient.StreamSocket.Get( onReturn == null ? null : (Action<TmphAsynchronousMethod.TmphReturnValue<bool>>) new TmphServerReturn { OnReturn = onReturn }.OnNewServer, NewServerCommandIndex, host, 1024, false, true, false); return; } catch (Exception error) { TmphLog.Error.Add(error, null, false); } if (onReturn != null) onReturn(false); }
/// <summary> /// 移除TCP调用服务端 /// </summary> /// <param name="host">TCP调用服务端端口信息</param> /// <returns>是否移除成功</returns> public bool RemoveServer(TmphHost host) { var wait = getWait(false); if (wait.Value != null) { try { wait.Key.Get(wait.Value.OnReturn, RemoveServerCommandIndex, host, 1024, false, false, false); var value = wait.Value.Value; return value.IsReturn && value.Value; } catch (Exception error) { TmphLog.Error.Add(error, null, false); } } return false; }
/// <summary> /// 重置TCP调用客户端 /// </summary> /// <param name="host">TCP调用端口信息</param> /// <param name="TmphClient">TCP调用客户端</param> /// <returns>TCP调用客户端+未完成处理数量</returns> internal TmphKeyValue<TClientType, int> ReSet(TmphHost host, TClientType TmphClient) { if (Client.Client != null && Host.Equals(host)) { var removeClient = Client.Client; var count = Count; Client.Set(TmphClient); Count = 0; return new TmphKeyValue<TClientType, int>(removeClient, count); } return default(TmphKeyValue<TClientType, int>); }
/// <summary> /// 移除TCP调用客户端 /// </summary> /// <param name="host">TCP调用端口信息</param> /// <returns>TCP调用客户端+未完成处理数量</returns> internal TmphKeyValue<TClientType, int> Remove(TmphHost host) { if (Client.Client != null && Host.Equals(host)) return Remove(); return default(TmphKeyValue<TClientType, int>); }
/// <summary> /// 设置TCP调用客户端 /// </summary> /// <param name="host">TCP调用端口信息</param> /// <param name="TmphClient">TCP调用客户端</param> /// <param name="index">TCP调用客户端索引</param> internal void Set(TmphHost host, TClientType TmphClient, int index) { Client.Set(TmphClient, index); Host = host; Count = 0; }
/// <summary> /// 重置TCP调用客户端 /// </summary> /// <param name="host">TCP调用端口信息</param> /// <param name="TmphClient">TCP调用客户端</param> internal void Set(TmphHost host, TClientType TmphClient) { Client.Client = TmphClient; Host = host; Count = 0; }
private bool setForward(TmphHost host) { if (isDisposed == 0 && host.HostToIpAddress()) { var tcpServer = new Code.CSharp.TmphTcpServer { Host = host.Host, Port = host.Port }; if (tcpServer.IpAddress != IPAddress.Any) { forwardHost = tcpServer; return true; } } return false; }
///// <summary> ///// 停止域名服务 ///// </summary> ///// <param name="domainServer">域名服务</param> //private unsafe void stop(domainServer domainServer) //{ // if (domainServer != null && domainServer.Domains != null) // { // try // { // for (int index = domainServer.Domains.Length; index != 0; ) // { // if (Interlocked.CompareExchange(ref domainServer.Domains[--index].Value, 1, 0) == 0) // { // stop(domainServer.Domains[index].Key); // Interlocked.Decrement(ref domainServer.DomainCount); // } // } // } // catch (Exception error) // { // log.Default.Add(error, null, false); // } // finally // { // domainServer.Dispose(); // } // } //} /// <summary> /// 停止TCP服务 /// </summary> /// <param name="host">TCP服务端口信息</param> private void stop(TmphHost host) { TmphServer server; Monitor.Enter(hostLock); try { if (hosts.TryGetValue(host, out server)) { if (--server.DomainCount == 0) hosts.Remove(host); else server = null; } } finally { Monitor.Exit(hostLock); } if (server != null) server.Dispose(); }
/// <summary> /// 启动TCP服务 /// </summary> /// <param name="host">TCP服务端口信息</param> /// <param name="certificateFileName">安全证书文件</param> /// <returns>HTTP服务启动状态</returns> private TmphStartState start(TmphHost host, string certificateFileName) { var state = TmphStartState.TcpError; TmphServer server = null; Monitor.Enter(hostLock); try { if (hosts.TryGetValue(host, out server)) { if (server.CheckCertificate(certificateFileName)) { ++server.DomainCount; return TmphStartState.Success; } server = null; state = TmphStartState.CertificateMatchError; } else { state = TmphStartState.CertificateError; server = certificateFileName == null ? new TmphServer(this, host) : new TmphSslServer(this, host, certificateFileName); state = TmphStartState.TcpError; if (server.Start()) { hosts.Add(host, server); return TmphStartState.Success; } } } catch (Exception error) { TmphLog.Error.Add(error, null, false); } finally { Monitor.Exit(hostLock); } TmphPub.Dispose(ref server); return state; }
/// <summary> /// HTTP服务 /// </summary> /// <param name="servers">HTTP服务器</param> /// <param name="host">TCP服务端口信息</param> /// <param name="certificateFileName">安全证书文件</param> public TmphSslServer(TmphServers servers, TmphHost host, string certificateFileName) : base(servers, host) { certificateFileData = File.ReadAllBytes(certificateFileName); certificate = X509Certificate.CreateFromCertFile(certificateFileName); }
/// <summary> /// HTTP服务 /// </summary> /// <param name="servers">HTTP服务器</param> /// <param name="host">TCP服务端口信息</param> public TmphServer(TmphServers servers, TmphHost host) : base(new TmphTcpServer { Host = host.Host, Port = host.Port, IsServer = true }) { this.servers = servers; DomainCount = 1; }