Beispiel #1
0
        public void WorkWS(HelperClass _helper)
        {
            _helper.ContextWs.WebSocket.OnMessage += (sender, args) => {
                HelperClass helper = (HelperClass)WSclients[sender];
                var         json   = Newtonsoft.Json.Linq.JObject.Parse(args.Data);
                if (!json.ContainsKey("path") || !json.ContainsKey("type") || !json.ContainsKey("body"))
                {
                    helper.ContextWs.WebSocket.Close(WebSocketSharp.CloseStatusCode.InvalidData, "Invalid message content");
                    return;
                }
                string         path      = (string)json["path"];
                Queue <string> pathSplit = new Queue <string>(path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries));
                if (pathSplit.Count == 0)
                {
                    return;
                }
                ControllerTreeElement tree = controllerTree.SearchWS(ref pathSplit, out string action);
                if (tree != null)
                {
                    ControllerWorker controller = (ControllerWorker)tree.plugin.GetPluginRefObject();
                    try {
                        GetStaticPlugins(controller, ref helper);
                        controller._WorkWS(helper, action, new object[] { (string)json["type"], (string)json["body"] });
                        helper.GetData(controller._GetHelper());

                        if (helper.returnType == ReturnType.DefaultContent)
                        {
                            string bufS = "";
                            ResentContent(ref helper, ref controller, ref bufS);
                            helper.ContextWs.WebSocket.Send(bufS);
                            bufS = null;
                        }
                    }
                    catch (Exception e) {
                        if (helper.ContextWs.WebSocket.IsAlive)
                        {
                            Log.Error("Ошибка обработки сообщения WebSocket", e);
                        }
                    }
                }
            };
            _helper.ContextWs.WebSocket.OnClose += (sender, args) => {
                HelperClass helper = (HelperClass)WSclients[sender];
                WSclients.Remove(sender);
            };

            if (WebSocketInit)
            {
                PluginWorker httpInitPlugin = GetPlugin(WebSocketinitName);
                GetStaticPlugins(httpInitPlugin, ref _helper);
                httpInitPlugin._Work(_helper);
                _helper.GetData(httpInitPlugin._GetHelper());
                if (_helper.Auth.Status)
                {
                    WSclients.Add(_helper.ContextWs.WebSocket, _helper);
                    _helper.ContextWs.WebSocket.Accept();
                    return;
                }
            }
            _helper.ContextWs.WebSocket.Close(WebSocketSharp.CloseStatusCode.Normal, "Unathorized");
        }