/// <summary> /// Connect to Charisma /// </summary> /// <param name="onReadyCallback">Called when successfully connected to Charisma.</param> public void Connect(Action onReadyCallback) { if (IsConnected) { return; } var options = new SocketOptions { ConnectWith = TransportTypes.WebSocket, AdditionalQueryParams = new ObservableDictionary <string, string> { { "token", Token } } }; _socketManager = new SocketManager(new Uri($"{BaseUrl}/socket.io/"), options) { Encoder = new LitJsonEncoder() }; _socket = _socketManager.GetSocket("/play"); _socket.On(SocketIOEventTypes.Connect, (socket, packet, args) => { CharismaLogger.Log("Connected to socket"); }); _socket.On("error", (socket, packet, args) => { Debug.LogError(args[0].ToString()); }); _socket.On("status", (socket, packet, args) => { if ((string)args[0] == "ready") { CharismaLogger.Log("Ready to begin play"); IsReadyToPlay = true; onReadyCallback?.Invoke(); } else { Debug.LogError("Charisma: Failed to set up websocket connection to server"); } }); _socket.On("message", (socket, packet, args) => { MainThreadConsumer.Instance.Enqueue((async() => { var response = await CharismaUtilities.GenerateResponse(packet.Payload); OnMessage?.Invoke(response.ConversationId, response); CharismaLogger.Log($"Received message"); })); }); _socket.On("start-typing", (socket, packet, args) => { OnStartTyping?.Invoke(JsonConvert.DeserializeObject <Conversation>(packet.Payload).ConversationId); CharismaLogger.Log("Start typing"); }); _socket.On("stop-typing", (socket, packet, args) => { OnStopTyping?.Invoke(JsonConvert.DeserializeObject <Conversation>(packet.Payload).ConversationId); CharismaLogger.Log("Stop typing"); }); _socket.On("problem", (socket, packet, args) => { CharismaLogger.Log(JsonConvert.DeserializeObject <CharismaError>(packet.Payload).Error); }); }
/// <summary> /// Connect to Charisma /// </summary> /// <param name="onReadyCallback">Called when successfully connected to Charisma.</param> public void Connect(Action onReadyCallback) { if (IsConnected) { return; } var options = new SocketOptions { ConnectWith = TransportTypes.WebSocket, AdditionalQueryParams = new ObservableDictionary <string, string> { { "token", Token } } }; _socketManager = new SocketManager(new Uri($"{BaseUrl}/socket.io/"), options) { Encoder = new LitJsonEncoder() }; _socket = _socketManager.GetSocket("/play"); _socket.On(SocketIOEventTypes.Connect, (socket, packet, args) => { CharismaLogger.Log("Connected to socket"); }); _socket.On("error", (socket, packet, args) => { Debug.LogError(args[0].ToString()); }); _socket.On("status", (socket, packet, args) => { if ((string)args[0] == "ready") { CharismaLogger.Log("Ready to begin play"); IsReadyToPlay = true; onReadyCallback?.Invoke(); } else { Debug.LogError("Charisma: Failed to set up websocket connection to server"); } }); _socket.On("message", (socket, packet, args) => { CharismaLogger.Log("Event received: `message`"); MainThreadConsumer.Instance.Enqueue((async() => { // Remove the `['message', ` at the front and the `]` at the back. var modifiedString = packet.Payload.Remove(packet.Payload.Length - 1, 1).Remove(0, 11); var deserialized = await Task.Run(() => JsonConvert.DeserializeObject <Events.MessageEvent>(modifiedString)); OnMessage?.Invoke(deserialized.ConversationId, deserialized); })); }); _socket.On("start-typing", (socket, packet, args) => { CharismaLogger.Log("Event received: `start-typing`"); var deserialized = JsonConvert.DeserializeObject <Conversation>(packet.Payload); OnStartTyping?.Invoke(deserialized.ConversationId); }); _socket.On("stop-typing", (socket, packet, args) => { CharismaLogger.Log("Event received: `stop-typing`"); var deserialized = JsonConvert.DeserializeObject <Conversation>(packet.Payload); OnStopTyping?.Invoke(deserialized.ConversationId); }); _socket.On("problem", (socket, packet, args) => { CharismaLogger.Log("Event received: `problem`"); var deserialized = JsonConvert.DeserializeObject <CharismaError>(packet.Payload); CharismaLogger.Log(deserialized.Error); }); }