PogWebsocket.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. export interface PogWebsocketListener {
  2. OnMessage(data: any): void;
  3. }
  4. export class PogWebsocket {
  5. public static create(url: string, message: PogWebsocketListener) {
  6. let pogWebsocket = new PogWebsocket();
  7. pogWebsocket.init(url, message);
  8. return pogWebsocket;
  9. }
  10. public get connected(): boolean {
  11. return this._connected;
  12. }
  13. ping() {
  14. if (!this._connected) {
  15. return;
  16. }
  17. let pingData = "ping";
  18. this._ws.send(pingData);
  19. }
  20. // private _url: string;
  21. private _ws: WebSocket;
  22. private _connected: boolean = false;
  23. private _message: PogWebsocketListener;
  24. private init(url: string, message: PogWebsocketListener) {
  25. // this._url = url;
  26. this._message = message;
  27. this._ws = new WebSocket(url);
  28. let self = this;
  29. this._ws.onopen = this.onOpen.bind(this);
  30. this._ws.onmessage = this.onMessage.bind(this);
  31. this._ws.onclose = this.onClose.bind(this);
  32. this._ws.onerror = this.onError.bind(this);
  33. }
  34. private onOpen() {
  35. console.log("onOpen");
  36. this._connected = true;
  37. // this._ws.send(
  38. // JSON.stringify({
  39. // type: "test",
  40. // data: "test",
  41. // })
  42. // );
  43. }
  44. private onMessage(data: MessageEvent) {
  45. if (data.data == "pong") {
  46. return;
  47. }
  48. this._message.OnMessage(data);
  49. }
  50. private onClose(event: CloseEvent) {
  51. console.log("onClose", event);
  52. this._connected = false;
  53. }
  54. private onError(event: Event) {
  55. console.log("onError", event);
  56. this._connected = false;
  57. }
  58. public async send(data: any) {
  59. if (!this._connected) {
  60. return;
  61. }
  62. await this._ws.send(data);
  63. }
  64. public close() {
  65. this._ws.close();
  66. }
  67. }