示例#1
0
        public override object OnClientConnected(Server server, WebSocket websocket)
        {
            SendOptions(websocket);

            var renderRoot        = new RenderRoot();
            var serializerContext = new RendererContext();

            var state = new ClientState(renderRoot, serializerContext);

            void Refresh(object o, System.ComponentModel.PropertyChangedEventArgs args)
            {
                serializerContext.Callbacks.Clear();
                serializerContext.ClearPropertyChangedHandlers();

                foreach (var target in renderRoot.Targets)
                {
                    var message = serializer.Serialize(target.Name, target.Value, state.serializerContext);
                    Task.Run(() => websocket.SendAsync(message, WebSocketMessageType.Text, true, default));
                }
            };

            serializerContext.onPropertyChanged = Refresh;

            SetContext(server, state.State, websocket);
            onClientConnected();
            Refresh(null, null);
            ResetContext();

            return(state);
        }
示例#2
0
        public GlobalStateRenderer(Server server, bool setGlobalContext, Action initialise)
        {
            this.server = server;
            state       = new RenderRoot();

            context = new RendererContext();
            context.onPropertyChanged = (s, e) => Refresh();

            if (setGlobalContext)
            {
                SetContext(server, state, null);
            }

            if (initialise != null)
            {
                if (!setGlobalContext)
                {
                    SetContext(server, state, null);
                }

                initialise.Invoke();

                if (!setGlobalContext)
                {
                    ResetContext();
                }
            }
        }
示例#3
0
 public ClientState(RenderRoot state, RendererContext serializerContext)
 {
     State = state;
     this.serializerContext = serializerContext;
 }
示例#4
0
 public void Setup()
 {
     root = new RenderRoot();
 }