internal TcpSocketSessionProviderHandle( SessionProviderOptions options, OnSessionNotify <SessionCompletedNotify, SessionProviderContext> onSessionNotifyProc) : base(onSessionNotifyProc) { _options = options; var serverConfig = new TcpSocketSaeaServerConfiguration(); serverConfig.AppKeepAlive = true; serverConfig.CompressTransferFromPacket = false; serverConfig.PendingConnectionBacklog = options.PendingConnectionBacklog; _server = TcpSocketsFactory.CreateServerAgent(TcpSocketSaeaSessionType.Packet, serverConfig, (notify, session) => { switch (notify) { case TcpSocketCompletionNotify.OnConnected: var sessionBased = new TcpSocketSessionBased(session); session.AppTokens = new object[] { sessionBased }; _onSessionNotifyProc(SessionCompletedNotify.OnConnected, sessionBased); break; case TcpSocketCompletionNotify.OnSend: _onSessionNotifyProc(SessionCompletedNotify.OnSend, session.AppTokens[0] as SessionProviderContext); break; case TcpSocketCompletionNotify.OnDataReceiveing: _onSessionNotifyProc(SessionCompletedNotify.OnRecv, session.AppTokens[0] as SessionProviderContext); break; case TcpSocketCompletionNotify.OnDataReceived: _onSessionNotifyProc(SessionCompletedNotify.OnReceived, session.AppTokens[0] as SessionProviderContext); break; case TcpSocketCompletionNotify.OnClosed: _onSessionNotifyProc(SessionCompletedNotify.OnClosed, session.AppTokens[0] as SessionProviderContext); break; default: break; } }); }
private void InitService() { string localIPAddress = AppConfiguration.ServiceIPAddress; int port = int.Parse(AppConfiguration.ServicePort); Console.Title = "Http远程控制服务 BEAT " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); this.PutLogQueue("DEBUG localIPAddress:" + localIPAddress); this.PutLogQueue("DEBUG port:" + port); WebSocketServer server = new WebSocketServer(); server.NewSessionConnected += Server_NewSessionConnected; server.NewMessageReceived += Server_NewMessageReceived; server.SessionClosed += Server_SessionClosed; server.Setup(localIPAddress, port); server.Start(); string serviceIPAddress = AppConfiguration.SessionServiceIPAddress; int servicePort = int.Parse(AppConfiguration.SessionServicePort); long accessKey = int.Parse(AppConfiguration.AccessKey); this.PutLogQueue("DEBUG serviceIPAddress:" + serviceIPAddress); this.PutLogQueue("DEBUG servicePort:" + servicePort); this.PutLogQueue("DEBUG accessKey:" + accessKey); this.PutLogQueue("DEBUG id:" + _login_id); this.PutLogQueue("DEBUG password:" + _login_password); var ipe = new IPEndPoint(IPAddress.Parse(serviceIPAddress), servicePort); SessionProviderOptions options = new SessionProviderOptions() { ServiceIPEndPoint = ipe, PendingConnectionBacklog = 0, AccessKey = accessKey }; options.SessionProviderType = SessionProviderType.TcpProxySession; _sessionProvider = SessionProviderFactory.CreateProxySessionProvider(options, OnNotifyProc, OnProxyNotify); _sessionProvider.StartSerivce(); }
/// <summary> /// session代理提供器构造函数 /// </summary> /// <param name="options">代理配置设置</param> /// <param name="onSessionNotifyProc">session事件通知</param> /// <param name="onProxyNotify">代理事件通知</param> internal TcpProxySessionProvider(SessionProviderOptions options) { ApplicationConfiguartion.SetOptions(options); var clientConfig = new TcpSocketSaeaClientConfiguration(); clientConfig.ReuseAddress = true; clientConfig.KeepAlive = true; clientConfig.KeepAliveInterval = 5000; clientConfig.KeepAliveSpanTime = 1000; //不启用压缩 clientConfig.CompressTransferFromPacket = false; //停用应用心跳检测线程 clientConfig.AppKeepAlive = false; _clientAgent = TcpSocketsFactory.CreateClientAgent(TcpSocketSaeaSessionType.Packet, clientConfig, (notify, session) => { switch (notify) { case TcpSessionNotify.OnConnected: this.ConnectedHandler(session); break; case TcpSessionNotify.OnSend: this.OnSend(session); break; case TcpSessionNotify.OnDataReceived: this.OnMessageHandler(session); break; case TcpSessionNotify.OnClosed: this.OnClosed(session); break; default: break; } }); }
internal TcpProxySessionProviderHandle( SessionProviderOptions options, OnSessionNotify <SessionCompletedNotify, SessionHandler> onSessionNotifyProc, OnProxyNotify <ProxyNotify> onProxyNotify) : base(onSessionNotifyProc) { _options = options; _onProxyNotify = onProxyNotify; var clientConfig = new TcpSocketSaeaClientConfiguration(); clientConfig.ReuseAddress = true; clientConfig.KeepAlive = true; clientConfig.KeepAliveInterval = 5000; clientConfig.KeepAliveSpanTime = 1000; _clientAgent = TcpSocketsFactory.CreateClientAgent(TcpSocketSaeaSessionType.Full, clientConfig, (notify, session) => { switch (notify) { case TcpSocketCompletionNotify.OnConnected: this.ConnectionProcess(session); break; case TcpSocketCompletionNotify.OnSend: this.OnSend(session); break; case TcpSocketCompletionNotify.OnDataReceiveing: this.PacketProcess(session); break; case TcpSocketCompletionNotify.OnClosed: this.OnClosed(session); break; default: break; } }); }
internal TcpSocketSessionProvider(SessionProviderOptions options) { ApplicationConfiguartion.SetOptions(options); var serverConfig = new TcpSocketSaeaServerConfiguration(); serverConfig.AppKeepAlive = true; serverConfig.CompressTransferFromPacket = false; serverConfig.PendingConnectionBacklog = ApplicationConfiguartion.Options.PendingConnectionBacklog; _server = TcpSocketsFactory.CreateServerAgent(TcpSocketSaeaSessionType.Packet, serverConfig, (notify, session) => { switch (notify) { case TcpSessionNotify.OnConnected: SessionProviderContext sessionBased = new TcpSocketSessionContext(session); this.SessionNotify(sessionBased, TcpSessionNotify.OnConnected); break; case TcpSessionNotify.OnSend: this.SessionNotify(session.AppTokens.First().ConvertTo <SessionProviderContext>(), TcpSessionNotify.OnSend); break; case TcpSessionNotify.OnDataReceiveing: this.SessionNotify(session.AppTokens.First().ConvertTo <SessionProviderContext>(), TcpSessionNotify.OnDataReceiveing); break; case TcpSessionNotify.OnDataReceived: this.SessionNotify(session.AppTokens.First().ConvertTo <SessionProviderContext>(), TcpSessionNotify.OnDataReceived); break; case TcpSessionNotify.OnClosed: this.SessionNotify(session.AppTokens.First().ConvertTo <SessionProviderContext>(), TcpSessionNotify.OnClosed); break; default: break; } }); }
public void StartService() { var providerType = int.Parse(AppConfiguration.SessionMode).ConvertTo <SessionProviderType>(); string ip = providerType == SessionProviderType.TcpServiceSession ? AppConfiguration.IPAddress : AppConfiguration.ServiceIPAddress; int port = providerType == SessionProviderType.TcpServiceSession ? AppConfiguration.Port : AppConfiguration.ServicePort; AppConfiguration.UseAccessId = !AppConfiguration.EnabledAnonyMous ? AppConfiguration.AccessId : DateTime.Now.ToFileTimeUtc(); int maxConnectCount = AppConfiguration.MaxConnectCount; var providerOptions = new SessionProviderOptions { ServiceIPEndPoint = new IPEndPoint(IPAddress.Parse(ip), port), PendingConnectionBacklog = maxConnectCount, AccessId = AppConfiguration.UseAccessId,//暂时使用UTC时间作为主控端标识 MainAppAccessKey = AppConfiguration.MainAppAccessKey, MaxPacketSize = 1024 * 1024 * 2, AccessKey = long.Parse(AppConfiguration.AccessKey), SessionProviderType = providerType }; if (providerType == SessionProviderType.TcpServiceSession) { if (StartServiceProvider(providerOptions)) { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统端口 {port.ToString()} 监听成功!", LogSeverityLevel.Information); } else { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统端口 {port.ToString()} 启动失败,请检查配置!", LogSeverityLevel.Warning); } } else { if (StartProxySessionProvider(providerOptions)) { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统初始化成功!", LogSeverityLevel.Information); } else { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统初始化发生错误,请注意检查配置!", LogSeverityLevel.Warning); } } bool StartServiceProvider(SessionProviderOptions providerOptions) { SessionProvider = SessionProviderFactory.CreateTcpSessionProvider(providerOptions); SessionProvider.SessionNotifyEventHandler += OnNotifyProc; try { SessionProvider.StartSerivce(); return(true); } catch (Exception ex) { LogHelper.WriteErrorByCurrentMethod(ex); return(false); } } bool StartProxySessionProvider(SessionProviderOptions providerOptions) { SessionProvider = SessionProviderFactory.CreateProxySessionProvider(providerOptions); SessionProvider.SessionNotifyEventHandler += OnNotifyProc; if (SessionProvider is TcpProxySessionProvider proxySessionProvider) { proxySessionProvider.ProxyProviderNotify += OnProxyNotifyHandlerEvent; } try { SessionProvider.StartSerivce(); return(true); } catch (Exception ex) { LogHelper.WriteErrorByCurrentMethod(ex); return(false); } } }
public void StartService() { if (_launch) { return; } _launch = true; AppConfiguration.AccessId = DateTime.Now.ToFileTimeUtc();//暂时使用UTC时间作为主控端标识 ThreadHelper.CreateThread(ApplicationResetThread, true); var sessionMode = int.Parse(AppConfiguration.SessionMode).ConvertTo <SessionProviderType>(); string ip = sessionMode == SessionProviderType.TcpServiceSession ? AppConfiguration.IPAddress : AppConfiguration.ServiceIPAddress; int port = sessionMode == SessionProviderType.TcpServiceSession ? AppConfiguration.Port : AppConfiguration.ServicePort; int maxconnectCount = AppConfiguration.MaxConnectCount; var options = new SessionProviderOptions { ServiceIPEndPoint = new IPEndPoint(IPAddress.Parse(ip), port), PendingConnectionBacklog = maxconnectCount, AccessKey = long.Parse(AppConfiguration.AccessKey) }; var providerType = sessionMode; options.SessionProviderType = providerType; if (providerType == SessionProviderType.TcpServiceSession) { if (StartServiceProvider(options)) { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统端口 {port.ToString()} 监听成功!", LogSeverityLevel.Information); } else { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统端口 {port.ToString()} 启动失败,请检查配置!", LogSeverityLevel.Warning); } } else { if (StartProxySessionProvider(options)) { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统初始化成功!", LogSeverityLevel.Information); } else { this.OnLogHandlerEvent?.Invoke($"SiMay远程监控管理系统初始化发生错误,请注意检查配置!", LogSeverityLevel.Warning); } } bool StartServiceProvider(SessionProviderOptions providerOptions) { SessionProvider = SessionProviderFactory.CreateTcpSessionProvider(providerOptions, OnNotifyProc); try { SessionProvider.StartSerivce(); return(true); } catch (Exception ex) { LogHelper.WriteErrorByCurrentMethod(ex); return(false); } } bool StartProxySessionProvider(SessionProviderOptions providerOptions) { SessionProvider = SessionProviderFactory.CreateProxySessionProvider(options, OnNotifyProc, OnProxyNotifyHandlerEvent); try { SessionProvider.StartSerivce(); return(true); } catch (Exception ex) { LogHelper.WriteErrorByCurrentMethod(ex); return(false); } } }
/// <summary> /// 初始化通信库 /// </summary> private void InitTcpServerChannel() { int sessionMode; if (!int.TryParse(AppConfiguration.SessionMode, out sessionMode)) { sessionMode = 0; } string ip = sessionMode == 0 ? AppConfiguration.IPAddress : AppConfiguration.ServiceIPAddress; int port = int.Parse(sessionMode == 0 ? AppConfiguration.Port : AppConfiguration.ServicePort); int maxconnectCount; if (!int.TryParse(AppConfiguration.MaxConnectCount, out maxconnectCount)) { maxconnectCount = 0; } if (port <= 0) { port = 5200; } if (maxconnectCount <= 0) { maxconnectCount = 100000; } this.stripHost.Text = ip; this.stripPort.Text = port.ToString(); var ipe = new IPEndPoint(IPAddress.Parse(ip), port); var options = new SessionProviderOptions() { ServiceIPEndPoint = ipe, PendingConnectionBacklog = maxconnectCount, AccessKey = long.Parse(AppConfiguration.AccessKey) }; var mode = int.Parse(AppConfiguration.SessionMode); if (mode == 0) { options.SessionProviderType = SessionProviderType.TcpServiceSession; _sessionProvider = SessionProviderFactory.CreateTcpSessionProvider(options, OnNotifyProc); try { _sessionProvider.StartSerivce(); this.WriteRuninglog("SiMay远程监控管理系统端口 " + port.ToString() + " 监听成功!", "ok"); } catch (Exception ex) { LogHelper.WriteErrorByCurrentMethod(ex); this.WriteRuninglog("SiMay远程监控管理系统端口 " + port.ToString() + " 启动失败,请检查配置!", "error"); } } else { options.SessionProviderType = SessionProviderType.TcpProxySession; _sessionProvider = SessionProviderFactory.CreateProxySessionProvider(options, OnNotifyProc, OnProxyNotify); try { _sessionProvider.StartSerivce(); this.WriteRuninglog("SiMay远程监控管理系统初始化成功!", "ok"); } catch (Exception ex) { LogHelper.WriteErrorByCurrentMethod(ex); this.WriteRuninglog("SiMay远程监控管理系统发生错误,请检查配置!", "error"); } } }