Example #1
0
        //Initializes the web socket server that listens for incoming requests
        private static void InitializeWebSockets()
        {
            allSockets = new List <IWebSocketConnection>();
            server     = new WebSocketServer(WEB_SOCKET_SERVICE_URL);

            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Connection Opened");
                    offer = null;
                    allSockets.Add(socket);
                };

                socket.OnClose = () =>
                {
                    Console.WriteLine("Connection Closed!");
                    offer = null;
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    HandleMessage(message);
                };
            });
        }
Example #2
0
        /// <summary>
        /// 消息到达
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="connId"></param>
        /// <param name="final"></param>
        /// <param name="opCode"></param>
        /// <param name="mask"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public HandleResult OnMessage(IWebSocketServer sender, IntPtr connId, bool final, OpCode opCode, byte[] mask, byte[] data)
        {
            Console.WriteLine($"OnMessage({connId}), final: {final}, op code: {opCode}, data length: {data.Length}");
            var ok = sender.Text(connId, $"这里只是一个欢迎页面, 只是欢迎您, 您可以连接到 {(sender.IsSecure ? "wss" : "ws")}://{sender.Uri.Host}:{sender.Uri.Port}/echo");

            return(ok ? HandleResult.Ok : HandleResult.Error);
        }
Example #3
0
        /// <summary>
        /// 消息到达
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="connId"></param>
        /// <param name="final"></param>
        /// <param name="opCode"></param>
        /// <param name="mask"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public HandleResult OnMessage(IWebSocketServer sender, IntPtr connId, bool final, OpCode opCode, byte[] mask, byte[] data)
        {
            Console.WriteLine($"OnMessage({connId}), final: {final}, op code: {opCode}, data length: {data.Length}");
            var ok = sender.Send(connId, opCode, data, data.Length);

            return(ok ? HandleResult.Ok : HandleResult.Error);
        }
Example #4
0
        public void StartListener(string host)
        {
            if (state == ENetState.Connected)
            {
                throw new Exception("Please disconnect at first.");
            }

            // 注意:不直接处理的原因是因为后面可能会把Server+Services独立到另外的进程
            // 否则通过Session直接可以转发到另外的对象

            var ws = new WebSocketServer(host);

            // 用于仿真端的连接, 仿真
            ws.AddService <ScratchLabService>(ScratchLabService.Path, (service) =>
            {
                service.labDispatcher = new ScratchLabDispatcher();
                // 仿真端协议的消息应答通过lab ctrl 进行回应
                service.forwardPath = ScratchLabControlService.Path;
            });
            // 用于控制端的连接,控制端发送消息到CtrlService,CtrlService分发到仿真端的控制
            ws.AddService <ScratchLabControlService>(ScratchLabControlService.Path, (service) =>
            {
                service.labDispatcher = new ScratchLabControlDispatcher(this);
                // 控制端协议的消息应答通过lab 进行回应
                service.forwardPath = ScratchLabService.Path;
            });
            ws.StartListening();
            mServer = ws;
        }
Example #5
0
 public WebSocketServerWrapper(string endPoint)
 {
     _webSocketServer = new WebSocketServer(endPoint)
     {
         RestartAfterListenError = true
     };
 }
Example #6
0
 private UseSocket(string Ip)
 {
     this._address = Ip;
     try
     {
         _Servier = new WebSocketServer(this._address);
         _Servier.Start(socket =>
         {
             socket.OnMessage = msg => {
                 Message(socket.GetPaarmiter(username), msg);
             };
             socket.OnOpen = () =>
             {
                 Open(socket);
             };
             socket.OnClose = () =>
             {
                 OnClose(socket);
             };
             socket.OnBinary = b =>
             {
                 BinaryMessage(socket.GetPaarmiter(username), b);
             };
         });
     }
     catch
     {
         throw new Exception("参数错误!来自UseSocket ,初始化失败");
     }
 }
 public WebSocketServerWrapper(string serverLoggingAddress)
 {
     _webSocketServer = new WebSocketServer(serverLoggingAddress)
     {
         RestartAfterListenError = true
     };
 }
Example #8
0
        public async Task Initialize()
        {
            var input = string.Empty;

            _server = new WebSocketServer($"{Url}:{_port}");
            await Task.Run(() =>
                           _server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    _msgText.Show($"New client connected: {socket.ConnectionInfo.ClientIpAddress}");
                    ConnectedSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    _msgText.Show($"Client disconnected: {socket.ConnectionInfo.ClientIpAddress}");
                    ConnectedSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    _msgText.Show(message);
                    ConnectedSockets.ToList().ForEach(s => s.Send(message));
                };
            }));
        }
        private void StartServer()
        {
            WebSocketServer server = new WebSocketServer(mLocation);

            mServer = server;
            server.SupportedSubProtocols = new[] { mBinding.Name };

            if (mCertificate != null)
            {
                server.Certificate = mCertificate;
            }

            if (mGetEnabledSslProtocols != null)
            {
                server.EnabledSslProtocols = mGetEnabledSslProtocols();
            }

            mServer.Start(connection =>
            {
                FleckWampTextConnection <TMessage> wampConnection =
                    new FleckWampTextConnection <TMessage>(connection,
                                                           mBinding);

                OnNewConnection(wampConnection);
            });
        }
Example #10
0
        public virtual void Dispose()
        {
            if(InternalSocketServer == null)
                throw new ObjectDisposedException(GetType().Name);

            InternalSocketServer.Dispose();
            InternalSocketServer = null;
        }
		public HttpWebSocketListener(IHttpServer httpServer, IWebSocketServer webSocketServer)
		{
			this.httpServer = httpServer;
			this.webSocketServer = webSocketServer;

			listener = new HttpListener();
			listener.Prefixes.Add("http://*:8080/");
		}
Example #12
0
        /// <summary>
        /// 连接打开
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="connId"></param>
        /// <returns></returns>
        public HandleResult OnOpen(IWebSocketServer sender, IntPtr connId)
        {
            var httpServer = (IHttpServer)sender.Http;

            Console.WriteLine($"OnOpen({connId}), cookie: {httpServer.GetHeader(connId, "Cookie")}, user-agent: {httpServer.GetHeader(connId, "User-Agent")}");

            return(HandleResult.Ok);
        }
Example #13
0
        public CoreServiceHost()
        {
            MessageManager = new MessageManager();
            CommandManager = new CommandManager();
            var webSocketServer = new WebSocketServer(CommandManager);

            WebSocketSender = webSocketServer;
            WebSocketServer = webSocketServer;
        }
Example #14
0
 public void StopListener()
 {
     if (mServer != null)
     {
         mServer.StopListening();
         mServer.Dispose();
         mServer = null;
     }
 }
Example #15
0
        protected SocketServer(IWebSocketServer socketServer)
        {
            Ensure.That(socketServer, "socketServer").IsNotNull();

            InternalSocketServer = socketServer;
            Subscriptions = new List<SocketSubscription>();
            Routes = new Routes();
            OnBootstrap();
        }
 public JsonApiWebSocketServer(int port, ICoreService coreInstance)
 {
     this.coreInstance = coreInstance;
     this.server = new WebSocketServer($"ws://0.0.0.0:{port}");
     this.connections = new List<IWebSocketConnection>();
     this.SocketMessage += this.Process;
     this.SocketOpen += (s, e) => this.connections.Add(e.Connection);
     this.SocketClose += (s, e) => this.connections.Remove(e.Connection);
 }
		public HttpWebSocketListener(IHttpServer httpServer, IWebSocketServer webSocketServer)
		{
			this.httpServer = httpServer;
			this.webSocketServer = webSocketServer;

			listener = new HttpListener();
			listener.Prefixes.Add("https://*/");
			listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
		}
        public CommandProvider(IFileStoreProvider fileStoreProvider)
        {
            this.fileStoreProvider = fileStoreProvider;
            this.portNumber        = this.getRandomUnusedPort();
            this.phantomWebSocket  = new WebSocketServer(string.Format("ws://0.0.0.0:{0}", this.portNumber));
            this.OpenPhantomWebSocket();

            this.phantomProcess = this.startPhantomJS(this.portNumber);
            this.waitForPhantomReady();
        }
 public FlexSoftCommunicationsLayer(IWebSocketServer webSocketServer,
                                    ConcurrentDictionary <IWebSocketConnection, ISocketClient> joinedClients,
                                    ConcurrentBag <SocketRoom> socketRooms,
                                    ILifetimeScope lifetimeScope)
 {
     _webSocketServer = webSocketServer;
     _joinedClients   = joinedClients;
     _socketRooms     = socketRooms;
     _lifetimeScope   = lifetimeScope;
 }
Example #20
0
        public CommandProvider(IFileStoreProvider fileStoreProvider)
        {
            this.fileStoreProvider = fileStoreProvider;
            this.portNumber = this.getRandomUnusedPort();
            this.phantomWebSocket = new WebSocketServer(string.Format("ws://0.0.0.0:{0}", this.portNumber));
            this.OpenPhantomWebSocket();

            this.phantomProcess = this.startPhantomJS(this.portNumber);
            this.waitForPhantomReady();
        }
 private void StopServerIfNeeded()
 {
     lock (mLock)
     {
         if (!mSubject.HasObservers)
         {
             mServer.Dispose();
             mServer = null;
         }
     }
 }
Example #22
0
        /// <summary>
        /// 握手成功, 打开/进入 连接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="connId"></param>
        /// <returns></returns>
        public virtual HandleResult OnOpen(IWebSocketServer sender, IntPtr connId)
        {
#if NET20 || NET30 || NET35
            lock (_connectionIds)
            {
                _connectionIds.Add(connId);
            }
#else
            _connectionIds.Add(connId);
#endif
            return(HandleResult.Ok);
        }
Example #23
0
        /// <summary>
        /// 连接关闭
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="connId"></param>
        /// <param name="socketOperation"></param>
        /// <param name="errorCode"></param>
        /// <returns></returns>
        public virtual HandleResult OnClose(IWebSocketServer sender, IntPtr connId, SocketOperation socketOperation, int errorCode)
        {
#if NET20 || NET30 || NET35
            lock (_connectionIds)
            {
                _connectionIds.Remove(connId);
            }
#else
            _connectionIds.TryTake(out var _);
#endif
            return(HandleResult.Ok);;
        }
Example #24
0
 public Server()
 {
     port = 0;
     //var input = Console.ReadLine();
     //while (input != "exit")
     //{
     //    foreach (var socket in allSockets.ToList())
     //    {
     //        socket.Send(input);
     //    }
     //    input = Console.ReadLine();
     //}
     server = new WebSocketServer("ws://0.0.0.0:" + port.ToString());
 }
Example #25
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ChatServer" /> class.
        /// </summary>
        /// <param name="userName">Name of the user.</param>
        /// <param name="port">The port.</param>
        /// <param name="serverAddress">The server address.</param>
        public ChatServer(string userName, string serverAddress)
            : base(userName, true)
        {
            if (serverAddress == null)
            {
                throw new ArgumentNullException(nameof(serverAddress));
            }

            this.webSocketServer = new WebSocketServer(serverAddress)
            {
                RestartAfterListenError = true
            };
            this.clients = new ConcurrentDictionary <Guid, IWebSocketConnection>();
        }
Example #26
0
 public Server()
 {
     port = 0;
     //var input = Console.ReadLine();
     //while (input != "exit")
     //{
     //    foreach (var socket in allSockets.ToList())
     //    {
     //        socket.Send(input);
     //    }
     //    input = Console.ReadLine();
     //}
     server = new WebSocketServer("ws://0.0.0.0:" + port.ToString());
 }
Example #27
0
        public ServiceHost()
        {
            var config = new LocalConfigHelper(Assembly.GetExecutingAssembly().Location, " WebSocket Service");

            IP   = config.GetString(nameof(IP));
            Port = config.GetInt(nameof(Port));

            var core = new CoreServiceHost();

            _commandManager  = core.CommandManager;
            _webSocketServer = core.WebSocketServer;
            _core            = core;

            RegsterCommands();
        }
Example #28
0
        /// <summary>
        /// 连接打开
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="connId"></param>
        /// <returns></returns>
        public HandleResult OnOpen(IWebSocketServer sender, IntPtr connId)
        {
            var httpServer = (IHttpServer)sender.Http;

            Console.WriteLine($"OnOpen({connId}), cookie: [{httpServer.GetHeader(connId, "Cookie")}], user-agent: [{httpServer.GetHeader(connId, "User-Agent")}]");

            var str = "Websocket是一种用于H5浏览器的实时通讯协议,可以做到数据的实时推送,可适用于广泛的工作环境,例如客服系统、物联网数据传输系统。";
            // 发送文本消息1
            var bytes = Encoding.UTF8.GetBytes(str);
            var ok    = sender.Send(connId, OpCode.Text, bytes, bytes.Length);

            // 发送文本消息2
            // var ok = sender.Text(connId, str);
            return(ok ? HandleResult.Ok : HandleResult.Error);
        }
Example #29
0
        /// <summary>
        /// Main Invoke Method
        /// </summary>
        /// <param name="context">Http Context</param>
        /// <param name="webSocketServer">WebSocket Server</param>
        /// <returns><see cref="Task"/></returns>
        public async Task Invoke(HttpContext context, IWebSocketServer webSocketServer)
        {
            // Bypass None WebSocket Requests
            if (!context.WebSockets.IsWebSocketRequest)
            {
                await this._next.Invoke(context);

                return;
            }

            this._webSocketServer = webSocketServer;

            // Grab the Cancellation Token for [RequestAborted]
            // todo: Fix this so that the CancellationToken is derived from the ApplicationLifetime instead!
            var cancellationToken = context.RequestAborted;

            // Accept the Incoming WebSocket
            var socket = await context.WebSockets.AcceptWebSocketAsync();

            // Get the Client Name
            var clientName = context.Request.Headers.FirstOrDefault(p => p.Key == CLIENT_NAME).Value;

            // Add the Socket to the Connection Manager
            var socketId = await this._webSocketServer.AddSocketAsync(socket, clientName);

            // Process incoming messages
            while (socket.State == WebSocketState.Open)
            {
                try
                {
                    await this.ReceiveAsync(socket, cancellationToken);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }

            // Close the Connection
            await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, CLOSURE_MESSAGE, cancellationToken);

            // Remove the Connection from the Connection Manager
            await this._webSocketServer.RemoveSocketAsync(socketId);
        }
Example #30
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider, IApplicationLifetime applicationLifetime)
        {
            SocketHandler.Map(app);
            serviceProvider.GetService <CapHandler>().MessageHandler();
            app.UseWebApi(_env);
            app.UseStateAutoMapper();
            IWebSocketServer socket = null;

            applicationLifetime.ApplicationStarted.Register(() =>
            {
                socket = app.ApplicationServices.GetRequiredService <ISocketService>()
                         .StartAsync().ConfigureAwait(false).GetAwaiter().GetResult();
            });
            applicationLifetime.ApplicationStopping.Register(() =>
            {
                socket?.Close();
            });
        }
Example #31
0
        public void Start(IWebSocketServer webSocketServer, Action onOpen, Action onClose)
        {
            var allSockets = new List <IWebSocketConnection>();

            webSocketServer.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    onOpen.Invoke();
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    onClose.Invoke();
                    _ = allSockets.Remove(socket);
                };
                socket.OnMessage = message => allSockets.ToList().ForEach(s => s.Send(message));
            });
        }
        public RemoteSessionSocketServer(Global global, IWebSocketServer server)
        {
            // websockets are not bound to an http context... the remote session manager must be retrieved from an application perspective
            _global = global;

            // logs
            FleckLog.Level     = LogLevel.Warn;
            FleckLog.LogAction = (level, message, ex) =>
            {
                switch (level)
                {
                case LogLevel.Debug:
                    Trace.TraceInformation(message, ex);
                    break;

                case LogLevel.Warn:
                    Trace.TraceWarning(message, ex);
                    break;

                case LogLevel.Error:
                    Trace.TraceError(message, ex);
                    break;

                default:
                    Trace.TraceInformation(message, ex);
                    break;
                }
            };

            // sockets
            _sockets     = new List <IWebSocketConnection>();
            _socketsLock = new object();

            // start sockets server
            server.Start(socket =>
            {
                socket.OnOpen    = () => { Open(socket); };
                socket.OnMessage = message => ProcessMessage(socket, message);
                socket.OnError   = exception => { Trace.TraceError("Websocket error {0}", exception); };
                socket.OnClose   = () => { Close(socket); };
            });
        }
Example #33
0
        /// <summary>
        /// 启动服务
        /// </summary>
        /// <returns></returns>
        public async Task <IWebSocketServer> StartAsync()
        {
            var port = _configuration.GetValue <int>("WebSocketPort");

            _socket = await SocketBuilderFactory.GetWebSocketServerBuilder(port)
                      .OnConnectionClose((server, connection) =>
            {
                _logger.LogInformation($"连接关闭,连接名[{connection.ConnectionName}],当前连接数:{server.GetConnectionCount()}");
                RemoveConnection(connection.ConnectionId);
            })
                      .OnException(ex =>
            {
                _logger.LogError(ex, $"服务端异常:{ex.Message}");
            })
                      .OnNewConnection((server, connection) =>
            {
                connection.ConnectionName = $"{connection.ClientAddress.ToString()}";
                _logger.LogInformation($"新的连接:{connection.ConnectionName},当前连接数:{server.GetConnectionCount()}");
            })
                      .OnRecieve((server, connection, msg) =>
            {
                if (msg.HasVal() && msg.StartsWith("InformIdentity_"))
                {
                    var userId = msg.Replace("InformIdentity_", string.Empty);
                    if (userId.HasVal())
                    {
                        AddConnection(userId, connection.ConnectionId);
                        connection.Send("InformIdentity_ok");
                    }
                }
            })
                      .OnSend((server, connection, msg) =>
            {
                _logger.LogInformation($"向连接名[{connection.ConnectionName}]发送数据:{msg}");
            })
                      .OnServerStarted(server =>
            {
                _logger.LogInformation($"服务启动");
            }).BuildAsync();

            return(_socket);
        }
Example #34
0
        private UseSocket(string Ip)
        {
            this._address = Ip;

            _Servier = new WebSocketServer(this._address);
            _Servier.Start(socket =>
            {
                socket.OnMessage = msg => {
                    Message(socket.GetPaarmiter(username), msg);
                };
                socket.OnOpen = () =>
                {
                    Open(socket);
                };
                socket.OnClose = () =>
                {
                    OnClose(socket);
                };
                socket.OnBinary = b =>
                {
                    BinaryMessage(socket.GetPaarmiter(username), b);
                };
            });
        }
Example #35
0
 /// <summary>
 /// pong 消息
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="connId"></param>
 /// <param name="data"></param>
 public virtual void OnPong(IWebSocketServer sender, IntPtr connId, byte[] data)
 {
 }
Example #36
0
        //Initializes the web socket server that listens for incoming requests
        private static void InitializeWebSockets()
        {
            allSockets = new List<IWebSocketConnection>();
            server = new WebSocketServer(WEB_SOCKET_SERVICE_URL);

            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Connection Opened");
                    offer = null;
                    allSockets.Add(socket);
                };

                socket.OnClose = () =>
                {
                    Console.WriteLine("Connection Closed!");
                    offer = null;
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    HandleMessage(message);
                };
            });
        }
 void IBaseHttpServer.StopServer()
 {
     this.server.Dispose();
     this.serverThread.Abort();
     this.server = null;
     this.serverThread = null;
 }
Example #38
0
 /// <summary>
 /// cont/text/binary 消息
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="connId"></param>
 /// <param name="final"></param>
 /// <param name="opCode"></param>
 /// <param name="mask"></param>
 /// <param name="data"></param>
 /// <returns></returns>
 public virtual HandleResult OnMessage(IWebSocketServer sender, IntPtr connId, bool final, OpCode opCode, byte[] mask, byte[] data) => HandleResult.Ok;
Example #39
0
 public NodeService(IWebSocketServer clientWebSocket)
 {
     this.openClientConnections = new Dictionary<IWebSocketConnection, TestProcessor>();
     this.clientWebSocket = clientWebSocket;
 }
Example #40
0
        public WebSocketManager(string Host, uint Port)
        {
            string location = "ws://" + Host + ":" + Port;

            _webSocketServer = new WebSocketServer(location);
            FleckLog.Level   = LogLevel.Error;

            _webSocketClientManager  = new WebSocketClientManager();
            _webSocketHandlerManager = new WebSocketHandlerManager();

            _webSocketServer.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    var Uuid = Guid.NewGuid().ToString();
                    log.Info("Connection created -> " + socket.ConnectionInfo.ClientIpAddress + " (" + Uuid + ")");
                    var socketClient = new WebSocketClient(Uuid, socket);
                    _webSocketClientManager.RegisterSocketClient(socketClient);
                    socketClient.Send(new HeyHandler(Uuid));
                };

                socket.OnClose = () =>
                {
                    var socketClient = _webSocketClientManager.GetWebSocketClient(socket);
                    GameEnvironment.GetGameManager().DestroyGame(socketClient.Game);
                    log.Info("Connection destroyed -> " + socket.ConnectionInfo.ClientIpAddress + " (" + socketClient.Uuid + ")");
                    _webSocketClientManager.DeregisterSocketClient(socket);
                };
                socket.OnMessage = (message) =>
                {
                    try
                    {
                        var Payload = JsonConvert.DeserializeObject <MessageObject>(message);
                        if (Payload.Event == null)
                        {
                            throw new Exception("No event handler was passed.");
                        }

                        var Handler = _webSocketHandlerManager.GetIncomingEventHandler(Payload.Event);
                        if (Handler == null)
                        {
                            throw new Exception("No handler was found for specified identifier");
                        }

                        var SocketClient = _webSocketClientManager.GetWebSocketClient(socket);
                        if (SocketClient == null)
                        {
                            throw new Exception("No SocketClient instance was found for the socket connection");
                        }

                        LogMessage(SocketClient.Uuid, message);

                        Handler.Execute(SocketClient, Payload);
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }
                };
            });

            log.Info("WebSocketManager (" + location + ") -> LOADED!");
        }