BeatSaberHttpStatusClient.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Newtonsoft.Json;
  2. using System;
  3. using WebSocketSharp;
  4. namespace BsWidget.BeatSaberHttpStatus
  5. {
  6. internal sealed class BeatSaberHttpStatusClient
  7. {
  8. private bool _isRunning;
  9. private WebSocket _webSocket;
  10. public event EventHandler<BeatSaberStatusEventArgs> Event;
  11. public void Start()
  12. {
  13. _isRunning = true;
  14. _webSocket = new WebSocket("ws://localhost:6557/socket");
  15. _webSocket.OnMessage += WebSocket_OnMessage;
  16. _webSocket.OnClose += WebSocket_OnClose;
  17. _webSocket.OnError += WebSocket_OnError;
  18. _webSocket.ConnectAsync();
  19. }
  20. public void Stop()
  21. {
  22. _isRunning = false;
  23. _webSocket.Close();
  24. }
  25. private void WebSocket_OnError(object sender, ErrorEventArgs e)
  26. {
  27. if (_isRunning) _webSocket.Connect();
  28. }
  29. private void WebSocket_OnClose(object sender, CloseEventArgs e)
  30. {
  31. if (_isRunning) _webSocket.Connect();
  32. }
  33. private void WebSocket_OnMessage(object sender, MessageEventArgs e)
  34. {
  35. //parse json
  36. var evt = JsonConvert.DeserializeObject<BeatSaberStatusEventArgs>(e.Data);
  37. OnEvent(evt);
  38. }
  39. private void OnEvent(BeatSaberStatusEventArgs e) => Event?.Invoke(this, e);
  40. }
  41. }