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); }
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(); } } }
public ClientState(RenderRoot state, RendererContext serializerContext) { State = state; this.serializerContext = serializerContext; }
public void Setup() { root = new RenderRoot(); }