public void ProcessHttpRequest(string _request)
        {
            Console.Out.Write("[{0}]: ", Tcp.Client.RemoteEndPoint);

            var httpParams = HttpHelper.GetHTTPParams(_request);
            if (httpParams.ContainsKey("Sec-WebSocket-Key"))
            {
				string wsProtocol = "";

				if (httpParams.ContainsKey("Sec-WebSocket-Protocol"))
                {
                    WebSocketProtocol = httpParams["Sec-WebSocket-Protocol"];
                    WebSocketHandler = Server.GetWebSocketHandler(WebSocketProtocol);
                    Console.Out.WriteLine("upgradet to WebSocketL: [{0}]", WebSocketProtocol);

					if (WebSocketHandler != null)
						wsProtocol = this.WebSocketProtocol;
				}				
				string response = HttpHelper.RespondWebSocketHandshake(httpParams["Sec-WebSocket-Key"], wsProtocol);
				IsWebSocket = true;
                HttpHelper.SendString(Tcp, response);
            }
            else
            {
                string response = Server.ProcessHTTPRequest(_request, this);
                HttpHelper.SendHttpResponse(Tcp, response);
                Console.Out.WriteLine("");
            }
        }
示例#2
0
        public static void CreateWebsocketHandler()
        {
            WebSocketConfigForJsonConfig websocketConfig = ConfigJson <WebSocketConfigForJsonConfig> .GetJsonFromConfigFile().Result;

            socketServer = new WebSocketTcpListener(websocketConfig);
            socketServer.RunServer(); // Start the Listener
        }
        public void Prepare()
        {
            _handler = Substitute.For <IWebSocketHandler>();
            var module = new WsModule(_handler);

            _browser = new Browser(with => with.Module(module));
        }
示例#4
0
 public VersionWebSocketController(IWebSocketHandler webSocketHandler, IVersionWebSocketService versionWebSocketService, IDebugHandler debugHandler)
 {
     debugHandler.TraceMessage("Constructor Called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);
     DebugHandler            = debugHandler;
     VersionWebSocketService = versionWebSocketService;
     WebSocketHandler        = webSocketHandler;
 }
 public SettingsWebSocketController(IWebSocketHandler webSocketHandler, ISettingsWebSocketService settingsWebSocketService, IDebugHandler debugHandler)
 {
     debugHandler.TraceMessage("Constructor Called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);
     DebugHandler             = debugHandler;
     SettingsWebSocketService = settingsWebSocketService;
     WebSocketHandler         = webSocketHandler;
 }
 public DirectoryWebSocketController(IWebSocketHandler webSocketHandler, IDirectoryWebSocketService directoryWebSocketService, IDebugHandler debugHandler)
 {
     debugHandler.TraceMessage("Contructor Called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);
     DebugHandler = debugHandler;
     DirectoryWebSocketService = directoryWebSocketService;
     WebSocketHandler          = webSocketHandler;
 }
        private void RegisterObjectHandler <T>(PathString path, IWebSocketHandler <T> handler)
        {
            var binaryHandler = new BinaryWebSocketHandler(new SerializingWebSocketHandler <T>(
                                                               handler, container.GetInstance <ISerializer>()));

            registry.Add(path, binaryHandler);
        }
        public DownloadWebSocketService(
            IWebSocketHandler webSocketHandler,
            IDirectoryHandler directoryHandler,
            IDownloadHandler downloadHandler,
            IFileHandler fileHandler,
            IFileHistoryHandler fileHistoryHandler,
            ISettingsHandler settingsHandler,
            IDebugHandler debugHandler)
        {
            debugHandler.TraceMessage("Constructor called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);

            DebugHandler       = debugHandler;
            WebSocketHandler   = webSocketHandler;
            DirectoryHandler   = directoryHandler;
            DownloadHandler    = downloadHandler;
            FileHandler        = fileHandler;
            FileHistoryHandler = fileHistoryHandler;
            SettingsHandler    = settingsHandler;
            LastDownloadedInfo = new JsonDownloadInfo();

            LittleWeebSettings = SettingsHandler.GetLittleWeebSettings();
            IrcSettings        = SettingsHandler.GetIrcSettings();


            downloadHandler.OnDownloadUpdateEvent += OnDownloadUpdateEvent;
        }
        public void CreateHandler(IEnumerable <byte> data)
        {
            byte[] bytes   = data.ToArray();
            var    request = RequestParser.Parse(bytes, owner.Schema);

            if (request == null)
            {
                return;
            }
            handler = WebSocketHandlerFactory.BuildHandler(request, SockectConnection.OnMessage, SockectConnection.OnClose, SockectConnection.OnBinary);
            if (handler == null)
            {
                return;
            }
            var subProtocol = SubProtocolNegotiator.Negotiate(owner.SupportedSubProtocols, request.SubProtocols);

            ConnectionInfo = WebSocketConnectionInfo.Create(request, SockectConnection.Socket.RemoteIpAddress, SockectConnection.Socket.RemotePort, subProtocol);

            if (!string.IsNullOrEmpty(ConnectionInfo.Path))
            {
                SockectConnection.Session.Add("WebSocket_Path", ConnectionInfo.Path);
            }

            foreach (string item in ConnectionInfo.Cookies.Keys)
            {
                SockectConnection.Session.Add(item, ConnectionInfo.Cookies[item]);
            }

            var handshake = handler.CreateHandshake(subProtocol);

            SockectConnection.RawSend(handshake);
        }
示例#10
0
        public ItemsViewModel(AdminAccess.AdminAccessClient client, IWebSocketHandler webSocketHandler)
        {
            _client           = client;
            _webSocketHandler = webSocketHandler;
            Items             = new ObservableCollection <QueueItem>();

            webSocketHandler.ItemsChanged += OnItemsChanged;
        }
        public BaseWebSocketController(IWebSocketHandler webSocketHandler, IDebugHandler debugHandler)
        {
            debugHandler.TraceMessage("Constructor Called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);
            DebugHandler = debugHandler;

            WebSocketHandler = webSocketHandler;
            WebSocketHandler.OnWebSocketEvent += OnWebSocketEvent;
        }
示例#12
0
        /// <summary>
        /// Starts broadcast
        /// </summary>
        /// <param name="webSocketHandler">websocket broadcast handler</param>
        /// <param name="cachedProcessesProvider">Container of processes infromation</param>
        public async Task InvokeAsync(IWebSocketHandler webSocketHandler, ICachedProcessesProvider cachedProcessesProvider, CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                await webSocketHandler.SendMessageToSubscribedAsync(JsonSerializer.Serialize(cachedProcessesProvider.GetProcesses()), cancellationToken);

                await Task.Delay(1000);
            }
        }
        public SettingsWebSocketService(IWebSocketHandler webSocketHandler,
                                        IDirectoryHandler directoryHandler, IDebugHandler debugHandler)
        {
            debugHandler.TraceMessage("Constructor Called", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);

            WebSocketHandler = webSocketHandler;
            DirectoryHandler = directoryHandler;
            DebugHandler     = debugHandler;
        }
示例#14
0
 public WebSocketHandlerMiddleware(RequestDelegate next,
                                   IWebSocketHandler webSocketHandler,
                                   ITempDataProvider cookie,
                                   ILogger <WebSocketHandlerMiddleware> logger)
 {
     this.next             = next;
     this.webSocketHandler = webSocketHandler;
     this.cookie           = cookie;
     this.logger           = logger;
 }
        public FileWebSocketService(IWebSocketHandler webSocketHandler, IFileHandler fileHandler, IFileHistoryHandler fileHistoryHandler, IDownloadHandler downloadHandler, IDebugHandler debugHandler)
        {
            debugHandler.TraceMessage("Constructor called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);

            WebSocketHandler   = webSocketHandler;
            FileHandler        = fileHandler;
            FileHistoryHandler = fileHistoryHandler;
            DownloadHandler    = downloadHandler;
            DebugHandler       = debugHandler;
        }
示例#16
0
        /// <summary>
        /// Invoke in asp.net core pipeline
        /// </summary>
        /// <param name="context">Http context</param>
        /// <param name="webSocketHandler">Websocket handler</param>
        /// <param name="idGenerator">Unique Id generator</param>
        public async Task Invoke(HttpContext context, IWebSocketHandler webSocketHandler, IUniqueIdentifierGenerator idGenerator)
        {
            if (!context.WebSockets.IsWebSocketRequest)
            {
                return;
            }

            var socket = new IdentifiableWebSocket(idGenerator, await context.WebSockets.AcceptWebSocketAsync());

            await webSocketHandler.HandleAsync(socket, _cancellationToken);
        }
示例#17
0
        public InfoApiWebSocketService(IWebSocketHandler webSocketHandler, IAnimeProfileHandler infoApiHandler, INiblHandler niblHandler, IDebugHandler debugHandler)
        {
            debugHandler.TraceMessage("Constructor Called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);

            WebSocketHandler    = webSocketHandler;
            AnimeProfileHandler = infoApiHandler;
            NiblHandler         = niblHandler;
            DebugHandler        = debugHandler;

            WeebFileNameParser = new WeebFileNameParser();
        }
示例#18
0
        public WebSocketClient(Uri uri, ClientEtiquette etiquette, IWebSocketHandler handler)
            : this(uri, etiquette)
        {
            if (handler == null)
            {
                throw new ArgumentNullException("handler");
            }

            webSocket.Connected    = handler.Connected;
            webSocket.Received     = handler.Received;
            webSocket.Disconnected = sender => handler.Disconnected(uri.ToString());
        }
示例#19
0
 public WebSocketClient(Uri remoteUri,
                        ClientEtiquette etiquette,
                        IWebSocketHandler handler,
                        RemoteCertificateValidationCallback certificateValidationCallback)
     : this(remoteUri, etiquette, handler)
 {
     if (certificateValidationCallback == null)
     {
         throw new ArgumentNullException("certificateValidationCallback");
     }
     this.certificateValidationCallback = certificateValidationCallback;
 }
示例#20
0
        public void Configure(
            IApplicationBuilder app,
            IWebHostEnvironment env,
            IWebSocketHandler webSocketHandler,
            IServiceScopeFactory serviceScopeFactory
            )
        {
            _webSocketHandler = webSocketHandler;

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Communicator v1"));
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseSession();

            app.UseWebSockets();
            app.Use(async(context, next) =>
            {
                if (context.Request.Path == "/ws")
                {
                    if (context.WebSockets.IsWebSocketRequest)
                    {
                        using var scope     = serviceScopeFactory.CreateScope();
                        var db              = scope.ServiceProvider.GetService <CommunicatorDbContex>();
                        WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
                        await _webSocketHandler.Handle(context.Session, webSocket, new Service(db));
                    }
                    else
                    {
                        context.Response.StatusCode = 400;
                    }
                }
                else
                {
                    await next();
                }
            });

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
示例#21
0
        public WebSocketNetworkFeature(IConnectionManager connectionManager, IWebSocketHandler socketHandler, IOptions <WebSocketManagerOptions> options)
        {
            Guard.NotNull(connectionManager, nameof(connectionManager));
            Guard.NotNull(socketHandler, nameof(socketHandler));
            Guard.NotNull(options, nameof(options));

            this._resources         = new List <IDisposable>();
            this._connectionManager = connectionManager;
            this._socketHandler     = socketHandler;
            this._options           = options.Value;

            _resources.Add(this._connectionManager);
        }
示例#22
0
        public static async Task ReceiveAsync(this WebSocket ws, IWebSocketHandler handler)
        {
            try
            {
                while (ws.State == WebSocketState.Open)
                {
                    var stringResult = new StringBuilder();
                    WebSocketReceiveResult received;
                    var buffer    = new ArraySegment <byte>(new byte[ChunkSize]);
                    var webSocket = ws;
                    do
                    {
                        received = await ws.ReceiveAsync(buffer, CancellationToken.None);

                        switch (received.MessageType)
                        {
                        case WebSocketMessageType.Close:
                            await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);

                            await handler.OnDisconected(webSocket);

                            break;

                        case WebSocketMessageType.Binary:
                            break;

                        case WebSocketMessageType.Text:
                            var data = Encoding.Default.GetString(buffer.Array, buffer.Offset, buffer.Count);
                            stringResult.Append(data.TrimEnd('\0'));
                            break;

                        default:
                            throw new ArgumentOutOfRangeException($"Unknown WebSocket MessageType: {received.MessageType}");
                        }
                    } while (!received.EndOfMessage);

                    RunInTask(async() => await handler.OnMessage(webSocket, stringResult.ToString()));
                }
            }
            catch (Exception e)
            {
                await handler.OnError(e);

                await handler.OnDisconected(ws);
            }
            finally
            {
                ws.Dispose();
            }
        }
        public void Listen(IWebSocketHandler handler)
        {
            Handler = handler;

            Handler.OnConnent();
            try
            {
                ListenerLoop();
            }
            finally
            {
                Handler.OnDisconnect();
            }
        }
示例#24
0
        public void Listen(IWebSocketHandler handler)
        {
            Handler = handler;

            Handler.OnConnent();
            try
            {
                ListenerLoop();
            }
            finally
            {
                Handler.OnDisconnect();
            }
        }
 public FilesController(
     DebugRepository debugRepository,
     IFileService fileService,
     IUserService userService,
     OpenRequestsRepository openRequestsRepository,
     IWebSocketHandler webSocketHandler,
     IServiceProvider serviceProvider)
 {
     _debugRepository        = debugRepository;
     _fileService            = fileService;
     _userService            = userService;
     _openRequestsRepository = openRequestsRepository;
     _webSocketHandler       = webSocketHandler;
     _serviceProvider        = serviceProvider;
 }
示例#26
0
 public FileService(
     OnlineUserRepository onlineUserRepository,
     IServiceProvider serviceProvider,
     IUserService userService,
     IOptions <FileSettings> fileSettingsOptions,
     IWebSocketHandler webSocketHandler,
     ILogger <FileService> logger)
 {
     _random = new Random();
     _onlineUserRepository = onlineUserRepository;
     _serviceProvider      = serviceProvider;
     _userService          = userService;
     _webSocketHandler     = webSocketHandler;
     _logger       = logger;
     _fileSettings = fileSettingsOptions.Value;
 }
示例#27
0
        public IrcWebSocketService(IWebSocketHandler webSocketHandler, IIrcClientHandler ircClientHandler, ISettingsHandler settingsHandler, IDebugHandler debugHandler)
        {
            debugHandler.TraceMessage("IrcWebSocketService Constructor called.", DebugSource.CONSTRUCTOR, DebugType.ENTRY_EXIT);

            SendMessageToWebSocketClient = false;
            IsIrcConnected   = false;
            SettingsHandler  = settingsHandler;
            IrcClientHandler = ircClientHandler;
            WebSocketHandler = webSocketHandler;
            DebugHandler     = debugHandler;

            LittleWeebSettings = SettingsHandler.GetLittleWeebSettings();
            IrcSettings        = SettingsHandler.GetIrcSettings();

            IrcClientHandler.OnIrcClientMessageEvent          += OnIrcClientMessageEvent;
            IrcClientHandler.OnIrcClientConnectionStatusEvent += OnIrcClientConnectionStatusEvent;
        }
示例#28
0
        //todo: consider joining HandleWebSocketRequest and ProcessRequest to one method
        private void HandleWebSocketRequest(NetworkStream stream, HttpRequest request)
        {
            //todo: can URI start with protocol?
            if (!requestHandler.CanCreateWebSocketHandler(request))
            {
                HttpResponse response = HttpResponse.NotFound();
                WriteResponse(stream, response);
                return;
            }

            ProcessWebSocketHandshake(stream, request);

            WebSocket         webSocket = new WebSocket(stream);
            IWebSocketHandler handler   = requestHandler.CreateWebSocketHandler(request, webSocket);

            webSocket.Listen(handler);
        }
示例#29
0
        private async Task HandleConnection(IWebSocketContext context, IWebSocketHandler <byte[]> handler)
        {
            var buffer    = new byte[1024 * 4];
            var webSocket = context.WebSocket;

            while (webSocket.State == WebSocketState.Open)
            {
                var(message, messageType) = await ReceiveMessage(webSocket, buffer);

                if (messageType == WebSocketMessageType.Close)
                {
                    continue;
                }

                var type = messageType == WebSocketMessageType.Binary ? MessageType.Binary : MessageType.Text;
                handler.OnMessage(context, message, type);
            }
        }
        public async Task InvokeAsync(
            HttpContext context,
            IWebSocketHandler webSocketHandler,
            IOptions <WebSocketOption> options)
        {
            if (context.WebSockets.IsWebSocketRequest && context.Request.Path == "/ws")
            {
                var queryString = context.Request.Query[options.Value.RequestType].ToString().AsWebSocketRequestType();

                var webSocket = await context.WebSockets.AcceptWebSocketAsync();

                await webSocketHandler.ProcessIncomingRequest(webSocket, queryString);
            }

            else
            {
                await _next(context);
            }
        }
        public void RegisterHandler <T>(PathString path, IWebSocketHandler <T> handler)
        {
            if (registrationClosed)
            {
                throw new InvalidOperationException("New handlers cannot be registered after the first invocation of the GetHandler method");
            }


            if (typeof(T) == typeof(string))
            {
                RegisterStringHandler(path, (IWebSocketHandler <string>)handler);
            }
            else if (typeof(T) == typeof(byte[]))
            {
                RegisterBinaryHandler(path, (IWebSocketHandler <byte[]>)handler);
            }
            else
            {
                RegisterObjectHandler(path, handler);
            }
        }