1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using BsWidgetShareCodes;
- using Newtonsoft.Json;
- using System;
- using System.Text;
- using WebSocketSharp;
- using WebSocketSharp.Server;
- using YUR.Fit.Core.Models;
- namespace BsYurHttpStatus
- {
- internal class HttpStatusServer
- {
- private int ServerPort = 6558;
- internal YurStatus Status { get; } = new YurStatus();
- internal event EventHandler StatusChanged;
- private HttpServer _server;
- public void Start()
- {
- _server = new HttpServer(ServerPort);
- _server.OnGet += (sender, e) =>
- {
- OnHTTPGet(e);
- };
- _server.AddWebSocketService<StatusBroadcastBehavior>("/socket", () =>
- {
- var statusBroadcastBehavior = new StatusBroadcastBehavior();
- statusBroadcastBehavior.SetParent(this);
- return statusBroadcastBehavior;
- });
- Plugin.Log("Starting HTTP server on port " + ServerPort);
- _server.Start();
- }
- public void Stop() => _server.Stop();
- public void Update(OverlayStatusUpdate input)
- {
- Status.HeartRate = input.HeartRate ?? input.SuckFloatProperty("EstHeartRate");
- Status.KcalPerMin = input.SuckFloatProperty("BurnRate");
- StatusChanged?.Invoke(this, EventArgs.Empty);
- }
- private void OnHTTPGet(HttpRequestEventArgs e)
- {
- var res = e.Response;
- res.StatusCode = 200;
- res.ContentType = "application/json";
- res.ContentEncoding = Encoding.UTF8;
- var json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(Status));
- res.ContentLength64 = json.Length;
- res.Close(json, false);
- }
- private class StatusBroadcastBehavior : WebSocketBehavior
- {
- private HttpStatusServer _parent;
- public void SetParent(HttpStatusServer httpStatusServer)
- {
- _parent = httpStatusServer;
- _parent.StatusChanged += StatusChanged;
- }
- protected override void OnOpen()
- {
- base.OnOpen();
- Send(JsonConvert.SerializeObject(_parent.Status));
- }
- protected override void OnClose(CloseEventArgs e)
- {
- base.OnClose(e);
- _parent.StatusChanged -= StatusChanged;
- }
- private void StatusChanged(object sender, EventArgs e)
- {
- Send(JsonConvert.SerializeObject(_parent.Status));
- }
- }
- }
- }
|