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;
                }
            });
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        /// <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;
                }
            });
        }
Beispiel #4
0
        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;
                }
            });
        }
Beispiel #6
0
        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);
                }
            }
        }
Beispiel #8
0
        /// <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");
                }
            }
        }