123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using System;
- using System.Text;
- using BsWidgetShareCodes;
- using Newtonsoft.Json;
- 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", behavior => behavior.SetParent(this));
- 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.CalculationMetrics.EstHeartRate;
- Status.KcalPerMin = input.CalculationMetrics.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));
- }
- }
- }
- }
|