Esempio n. 1
0
        /// <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);
            });
        }
Esempio n. 2
0
        /// <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);
            });
        }