12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using Newtonsoft.Json;
- using System;
- using WebSocketSharp;
- namespace BsWidget.BeatSaberHttpStatus
- {
- internal sealed class BeatSaberHttpStatusClient
- {
- private bool _isRunning;
- private WebSocket _webSocket;
- public event EventHandler<BeatSaberStatusEventArgs> Event;
- public void Start()
- {
- _isRunning = true;
- _webSocket = new WebSocket("ws://localhost:6557/socket");
- _webSocket.OnMessage += WebSocket_OnMessage;
- _webSocket.OnClose += WebSocket_OnClose;
- _webSocket.OnError += WebSocket_OnError;
- _webSocket.ConnectAsync();
- }
- public void Stop()
- {
- _isRunning = false;
- _webSocket.Close();
- }
- private void WebSocket_OnError(object sender, ErrorEventArgs e)
- {
- if (_isRunning) _webSocket.Connect();
- }
- private void WebSocket_OnClose(object sender, CloseEventArgs e)
- {
- if (_isRunning) _webSocket.Connect();
- }
- private void WebSocket_OnMessage(object sender, MessageEventArgs e)
- {
- //parse json
- var evt = JsonConvert.DeserializeObject<BeatSaberStatusEventArgs>(e.Data);
- OnEvent(evt);
- }
- private void OnEvent(BeatSaberStatusEventArgs e) => Event?.Invoke(this, e);
- }
- }
|