BsYurHttpStatusClient.cs 1.3 KB

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