예제 #1
0
        public async void HandlesValidPresenceChange()
        {
            var users = new List<User>
            {
                new User { Id = "BADID", Presence = "away" },
                new User { Id = "USERID", Presence = "away" }
            };

            var mockState = new Mock<IBotState>();
            mockState.Setup(s => s.Users)
                     .Returns(users)
                     .Verifiable();

            var message = new PresenceChange
            {
                Type = EventType.Message,
                User = "******",
                Presence = "active"
            };

            var handler = new PresenceHandler();
            handler.BotState = mockState.Object;

            var result = await handler.HandleMessageAsync(message);

            mockState.Verify();
            Assert.Equal("away", users[0].Presence);
            Assert.Equal("active", users[1].Presence);
        }
예제 #2
0
        public async void IgnoresNonMatchedUser()
        {
            var users = new List <User>
            {
                new User {
                    Id = "BADID1", Presence = "away"
                },
                new User {
                    Id = "BADID2", Presence = "away"
                }
            };

            var mockState = new Mock <IBotState>();

            mockState.Setup(s => s.Users)
            .Returns(users)
            .Verifiable();

            var message = new PresenceChange
            {
                Type     = EventType.Message,
                User     = "******",
                Presence = "active"
            };

            var handler = new PresenceHandler();

            handler.BotState = mockState.Object;

            var result = await handler.HandleMessageAsync(message);

            mockState.Verify();
            Assert.Equal("away", users[0].Presence);
            Assert.Equal("away", users[1].Presence);
        }
예제 #3
0
        public void CanNotHandleInvalidPresenceMessages()
        {
            var message = new MeMessage { Type = EventType.Message };
            var handler = new PresenceHandler();

            var result = handler.CanHandle(message);

            Assert.False(result);
        }
예제 #4
0
        public void CanHandlePresenceMessages()
        {
            var message = new PresenceChange { Type = EventType.PresenceChange };
            var handler = new PresenceHandler();

            var result = handler.CanHandle(message);

            Assert.True(result);
        }
예제 #5
0
        /// <summary>
        /// Subscribes to presence events using the default key. Optionaly requests a status of the channel.
        /// </summary>
        /// <param name="channel">The name of the channel</param>
        /// <param name="status">Whether to request a status of the channel.</param>
        /// <param name="optionalHandler">A specific handler to receive presence events for this channel.</param>
        public void PresenceSubscribe(string channel, bool status, PresenceHandler optionalHandler = null)
        {
            if (this.DefaultKey == null)
            {
                throw EmitterException.NoDefaultKey;
            }

            this.PresenceSubscribe(this.DefaultKey, channel, status, optionalHandler);
        }
예제 #6
0
        /// <summary>
        /// Requests a status of the channel using the default key.
        /// </summary>
        /// <param name="channel">The name of the channel.</param>
        /// <param name="optionalHandler">An optional handler, specific to this channel.</param>
        public void PresenceStatus(string channel, PresenceHandler optionalHandler)
        {
            if (this.DefaultKey == null)
            {
                throw EmitterException.NoDefaultKey;
            }

            this.PresenceStatus(this.DefaultKey, channel, optionalHandler);
        }
예제 #7
0
        public void CanNotHandleInvalidPresenceMessages()
        {
            var message = new MeMessage {
                Type = EventType.Message
            };
            var handler = new PresenceHandler();

            var result = handler.CanHandle(message);

            Assert.False(result);
        }
예제 #8
0
        public void CanHandlePresenceMessages()
        {
            var message = new PresenceChange {
                Type = EventType.PresenceChange
            };
            var handler = new PresenceHandler();

            var result = handler.CanHandle(message);

            Assert.True(result);
        }
예제 #9
0
        /// <summary>
        /// Subscribes to presence events. Optionaly requests a status of the channel.
        /// </summary>
        /// <param name="key">The key for the channel</param>
        /// <param name="channel">The name of the channel</param>
        /// <param name="status">Whether to request a status of the channel.</param>
        /// <param name="optionalHandler">A specific handler to receive presence events for this channel.</param>
        public void PresenceSubscribe(string key, string channel, bool status, PresenceHandler optionalHandler = null)
        {
            if (optionalHandler != null)
            {
                this.PresenceTrie.RegisterHandler(channel, optionalHandler);
            }

            var request = new PresenceRequest();

            request.Key     = key;
            request.Channel = channel;
            request.Status  = status;
            request.Changes = true;

            this.Publish("emitter/", "presence", Encoding.UTF8.GetBytes(request.ToJson()));
        }
예제 #10
0
        public string ValidatePresence([FromBody] JsonInformations informations)
        {
            ResponseInfo response = new ResponseInfo();

            if (informations != null)
            {
                PresenceHandler presence                     = new PresenceHandler(informations);
                List <string>   presenceInformations         = null;
                List <Tuple <string, object> > logParameters = new List <Tuple <string, object> >();
                try {
                    presenceInformations = presence.ValidatePresence();
                    if (presenceInformations != null)
                    {
                        response = new ResponseInfo {
                            header  = "Sucesso",
                            message = presenceInformations[0] + " sua presença na aula " + presenceInformations[1] + " validada com sucesso"
                        };

                        logParameters.Add(new Tuple <string, object>("@Latitude", informations.Latitude));
                        logParameters.Add(new Tuple <string, object>("@Longitude", informations.Longitude));
                        logParameters.Add(new Tuple <string, object>("@Sucess", "Y"));
                        logParameters.Add(new Tuple <string, object>("@Error", ""));
                        presence.InsertLog(logParameters);
                        logParameters.Clear();
                        return(JsonConvert.SerializeObject(response));
                    }
                    else
                    {
                        response = new ResponseInfo {
                            header  = "Erro",
                            message = "Não foi possível validar sua presença"
                        };

                        logParameters.Add(new Tuple <string, object>("@Latitude", informations.Latitude));
                        logParameters.Add(new Tuple <string, object>("@Longitude", informations.Longitude));
                        logParameters.Add(new Tuple <string, object>("@Sucess", "N"));
                        logParameters.Add(new Tuple <string, object>("@Error", "Não foi possível validar sua presença"));
                        presence.InsertLog(logParameters);
                        logParameters.Clear();
                        return(JsonConvert.SerializeObject(response));
                    }
                } catch (ResponseException e) {
                    logParameters.Add(new Tuple <string, object>("@Latitude", informations.Latitude));
                    logParameters.Add(new Tuple <string, object>("@Longitude", informations.Longitude));
                    logParameters.Add(new Tuple <string, object>("@Sucess", "N"));
                    logParameters.Add(new Tuple <string, object>("@Error", e.Info.message));
                    presence.InsertLog(logParameters);
                    logParameters.Clear();
                    return(JsonConvert.SerializeObject(e.Info));
                } catch {
                    response = new ResponseInfo {
                        header  = "Erro",
                        message = "Ocorreu um erro interno, favor entrar em contato com o suporte"
                    };

                    logParameters.Add(new Tuple <string, object>("@Latitude", informations.Latitude));
                    logParameters.Add(new Tuple <string, object>("@Longitude", informations.Longitude));
                    logParameters.Add(new Tuple <string, object>("@Sucess", "N"));
                    logParameters.Add(new Tuple <string, object>("@Error", "Ocorreu um erro interno, favor entrar em contato com o suporte"));
                    presence.InsertLog(logParameters);
                    logParameters.Clear();
                    return(JsonConvert.SerializeObject(response));
                }
            }
            else
            {
                response = new ResponseInfo {
                    header  = "Erro",
                    message = "Informações inválidas recebidas pelo servidor"
                };
                return(JsonConvert.SerializeObject(response));
            }
        }