> For the complete documentation index, see [llms.txt](https://vc-docs.gitbook.io/engine/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vc-docs.gitbook.io/engine/home/doxygen_synced/files/_web_socket_8cs.md).

# Source/WebSocket.cs

## Classes

|       | Name                                                                                                                                                                                                                                                                     |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| class | <p><a href="https://git.unimetaverse.net/vc-core-engine/doxygen/-/blob/main/Files/Classes/class_web_socket.md"><strong>WebSocket</strong></a><br>Proxy class for Endel.NativeWebSocket.WebSocket.</p>                                                                    |
| class | <p><a href="https://git.unimetaverse.net/vc-core-engine/doxygen/-/blob/main/Files/Classes/class_web_socket_1_1_web_socket_state.md"><strong>WebSocket::WebSocketState</strong></a><br>Proxy class for <a href="/pages/sq19gZMm4LpE42zc7QuN">WebSocketState</a> enum.</p> |

## Source code

```csharp

public class WebSocket
{
  NativeWebSocket.WebSocket _webSocket;

  public NativeWebSocket.WebSocketState State => _webSocket.State;

  public static class WebSocketState
  {
    public static NativeWebSocket.WebSocketState Connecting => NativeWebSocket.WebSocketState.Connecting;
    public static NativeWebSocket.WebSocketState Open => NativeWebSocket.WebSocketState.Open;
    public static NativeWebSocket.WebSocketState Closing => NativeWebSocket.WebSocketState.Closing;
    public static NativeWebSocket.WebSocketState Closed => NativeWebSocket.WebSocketState.Closed;
  }

  public void AddOnOpen(NativeWebSocket.WebSocketOpenEventHandler callback)
  {
    _webSocket.OnOpen += callback;
  }
  public void RemoveOnOpen(NativeWebSocket.WebSocketOpenEventHandler callback)
  {
    _webSocket.OnOpen -= callback;
  }
  public void AddOnMessage(NativeWebSocket.WebSocketMessageEventHandler callback)
  {
    _webSocket.OnMessage += callback;
  }
  public void RemoveOnMessage(NativeWebSocket.WebSocketMessageEventHandler callback)
  {
    _webSocket.OnMessage -= callback;
  }
  public void AddOnError(NativeWebSocket.WebSocketErrorEventHandler callback)
  {
    _webSocket.OnError += callback;
  }
  public void RemoveOnError(NativeWebSocket.WebSocketErrorEventHandler callback)
  {
    _webSocket.OnError -= callback;
  }
  public void AddOnClose(NativeWebSocket.WebSocketCloseEventHandler callback)
  {
    _webSocket.OnClose += callback;
  }
  public void RemoveOnClose(NativeWebSocket.WebSocketCloseEventHandler callback)
  {
    _webSocket.OnClose -= callback;
  }

  public WebSocket(string url)
  {
    _webSocket = new(url);
  }
  public void Connect(Action callback)
  {
    ConnectAsync(callback).Forget();
  }

  async UniTaskVoid ConnectAsync(Action callback)
  {
    await _webSocket.Connect();
    callback();
  }

  public void DispatchMessageQueue()
  {
    _webSocket.DispatchMessageQueue();
  }

  public void SendText(string message, Action callback)
  {
    SendTextAsync(message, callback).Forget();
  }

  async UniTaskVoid SendTextAsync(string message, Action callback)
  {
    await _webSocket.SendText(message);
    callback();
  }

  public void Close(Action callback)
  {
    CloseAsync(callback).Forget();
  }

  async UniTaskVoid CloseAsync(Action callback)
  {
    await _webSocket.Close();
    callback();
  }

}
```

***

Updated on 2026-06-23 at 10:43:25 +0800
