Ejemplo n.º 1
0
        private static void presenceEventHandler(object Smartspot, EventArgs e)
        {
            PresenceEvent presenceEvent = (PresenceEvent)e; // Cast EventArgs to PresenceEvent

            Console.WriteLine("Presence type: {0,5}, Presence proximity: {1, 10}, Item code: {2}",
                              presenceEvent.Type,
                              presenceEvent.Presence.Proximity,
                              presenceEvent.Presence.Item.Code);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates a notification packet.
        /// </summary>
        /// <param name="type">The event type.</param>
        /// <param name="channel">The target channel for this notification.</param>
        /// <param name="occupancy">The occupancy.</param>
        public PresenceNotification(PresenceEvent type, string channel, PresenceInfo who, int occupancy)
        {
            switch (type)
            {
            case PresenceEvent.Status: this.Event = "status"; break;

            case PresenceEvent.Subscribe: this.Event = "subscribe"; break;

            case PresenceEvent.Unsubscribe: this.Event = "unsubscribe"; break;
            }

            this.Time      = Timer.UtcNow.ToUnixTimestamp();
            this.Channel   = channel;
            this.Who       = who;
            this.Occupancy = occupancy;
        }
Ejemplo n.º 3
0
 public void OnPresenceChanged(Device device, PresenceEvent presenceEvent)
 {
     Console.WriteLine("Received Presence Update");
 }
Ejemplo n.º 4
0
        public HttpBackend(Uri apiUrl, string userId)
        {
            _jsonSerializer = new JsonSerializer();
            _client         = new HttpClient();
            _baseUrl        = apiUrl;
            _userId         = userId;

            ServicePointManager.ServerCertificateValidationCallback += AcceptCertificate;

            _jsonSerializer.Converters.Add(JsonSubtypesConverterBuilder
                                           .Of(typeof(IEvent), @"type")
                                           .RegisterSubtype(typeof(PresenceEvent), PresenceEvent.ToJsonString())
                                           .RegisterSubtype(typeof(ReceiptEvent), ReceiptEvent.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomAvatarContent>), EventKind.RoomAvatar.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomCanonicalAliasContent>), EventKind.RoomCanonicalAlias.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomCreateContent>), EventKind.RoomCreate.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomGuestAccessContent>), EventKind.RoomGuestAccess.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomHistoryVisibilityContent>), EventKind.RoomHistoryVisibility.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomJoinRulesContent>), EventKind.RoomJoinRule.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomMembershipContent>), EventKind.RoomMembership.ToJsonString())
                                           .RegisterSubtype(typeof(RoomEvent <IMessageContent>), EventKind.RoomMessage.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomNameContent>), EventKind.RoomName.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomPinnedEventsContent>), EventKind.RoomPinnedEvents.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomPowerLevelsContent>), EventKind.RoomPowerLevels.ToJsonString())
                                           .RegisterSubtype(typeof(RoomEvent <RedactionContent>), EventKind.RoomRedaction.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomServerAclContent>), EventKind.RoomServerAcl.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomThirdPartyInviteContent>), EventKind.RoomThirdPartyInvite.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomTombstoneContent>), EventKind.RoomTombstone.ToJsonString())
                                           .RegisterSubtype(typeof(StateEvent <RoomTopicContent>), EventKind.RoomTopic.ToJsonString())
                                           .SerializeDiscriminatorProperty()
                                           .Build());

            _jsonSerializer.Converters.Add(JsonSubtypesConverterBuilder
                                           .Of(typeof(IStrippedState), @"type")
                                           .RegisterSubtype(typeof(StrippedState <RoomAvatarContent>), EventKind.RoomAvatar.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomCanonicalAliasContent>), EventKind.RoomCanonicalAlias.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomCreateContent>), EventKind.RoomCreate.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomGuestAccessContent>), EventKind.RoomGuestAccess.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomHistoryVisibilityContent>), EventKind.RoomHistoryVisibility.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomJoinRulesContent>), EventKind.RoomJoinRule.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomMembershipContent>), EventKind.RoomMembership.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomNameContent>), EventKind.RoomName.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomPinnedEventsContent>), EventKind.RoomPinnedEvents.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomPowerLevelsContent>), EventKind.RoomPowerLevels.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomServerAclContent>), EventKind.RoomServerAcl.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomThirdPartyInviteContent>), EventKind.RoomThirdPartyInvite.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomTombstoneContent>), EventKind.RoomTombstone.ToJsonString())
                                           .RegisterSubtype(typeof(StrippedState <RoomTopicContent>), EventKind.RoomTopic.ToJsonString())
                                           .SerializeDiscriminatorProperty()
                                           .Build());

            _jsonSerializer.Converters.Add(new AuthKindJsonConverter());
            _jsonSerializer.Converters.Add(new ErrorCodeJsonConverter());
            _jsonSerializer.Converters.Add(new EventKindJsonConverter());
            _jsonSerializer.Converters.Add(new GuestAccessJsonConverter());
            _jsonSerializer.Converters.Add(new HistoryVisibilityJsonConverter());
            _jsonSerializer.Converters.Add(new JoinRuleJsonConverter());
            _jsonSerializer.Converters.Add(new MembershipStateJsonConverter());
            _jsonSerializer.Converters.Add(new MessageKindJsonConverter());
            _jsonSerializer.Converters.Add(new PresenceStateJsonConverter());
            _jsonSerializer.Converters.Add(new ClientServerVersionJsonConverter());
            _jsonSerializer.Converters.Add(new RoomsVersionsJsonConverter());

            _jsonSerializer.Converters.Add(JsonSubtypesWithPropertyConverterBuilder
                                           .Of(typeof(IEventContent))
                                           .RegisterSubtypeWithProperty(typeof(PresenceContent), @"presence")
                                           .Build());

            //_jsonSerializer.Converters.Add(JsonSubtypesWithPropertyConverterBuilder
            //    .Of(typeof(IRoomContent))
            //    .RegisterSubtypeWithProperty(typeof(PresenceContent), @"presence")
            //    .Build());

            _jsonSerializer.Converters.Add(JsonSubtypesConverterBuilder
                                           .Of(typeof(IMessageContent), @"msgtype")
                                           .RegisterSubtype(typeof(AudioMessageContent), MessageKind.Audio.ToJsonString())
                                           .RegisterSubtype(typeof(EmoteMessageContent), MessageKind.Emote.ToJsonString())
                                           .RegisterSubtype(typeof(FileMessageContent), MessageKind.File.ToJsonString())
                                           .RegisterSubtype(typeof(ImageMessageContent), MessageKind.Image.ToJsonString())
                                           .RegisterSubtype(typeof(LocationMessageContent), MessageKind.Location.ToJsonString())
                                           .RegisterSubtype(typeof(NoticeMessageContent), MessageKind.Notice.ToJsonString())
                                           .RegisterSubtype(typeof(ServerNoticeMessageContent), MessageKind.ServerNotice.ToJsonString())
                                           .RegisterSubtype(typeof(TextMessageContent), MessageKind.Text.ToJsonString())
                                           //.RegisterSubtype(typeof(VideoMessageEventContent), MessageKind.Video.ToJsonString())
                                           .Build());

            _jsonSerializer.Converters.Add(JsonSubtypesWithPropertyConverterBuilder
                                           .Of(typeof(IStateContent))
                                           .RegisterSubtypeWithProperty(typeof(RoomCanonicalAliasContent), @"alias")
                                           .RegisterSubtypeWithProperty(typeof(RoomCanonicalAliasContent), @"alt_aliases")
                                           .RegisterSubtypeWithProperty(typeof(RoomAvatarContent), @"url")
                                           .RegisterSubtypeWithProperty(typeof(RoomCreateContent), @"creator")
                                           .RegisterSubtypeWithProperty(typeof(RoomGuestAccessContent), @"guest_access")
                                           .RegisterSubtypeWithProperty(typeof(RoomHistoryVisibilityContent), @"history_visibility")
                                           .RegisterSubtypeWithProperty(typeof(RoomJoinRulesContent), @"join_rule")
                                           .RegisterSubtypeWithProperty(typeof(RoomMembershipContent), @"membership")
                                           .RegisterSubtypeWithProperty(typeof(RoomNameContent), @"name")
                                           .RegisterSubtypeWithProperty(typeof(RoomPinnedEventsContent), @"pinned")
                                           .RegisterSubtypeWithProperty(typeof(RedactionContent), @"redacts")
                                           .RegisterSubtypeWithProperty(typeof(RoomThirdPartyInviteContent), @"key_validity_url")
                                           .RegisterSubtypeWithProperty(typeof(RoomTombstoneContent), @"replacement_room")
                                           .RegisterSubtypeWithProperty(typeof(RoomTopicContent), @"topic")
                                           .Build());

            _jsonSerializer.Converters.Add(JsonSubtypesConverterBuilder
                                           .Of(typeof(IRequest), @"type")
                                           .RegisterSubtype(typeof(PasswordAuthRequest <>), AuthKind.Password.ToJsonString())
                                           .RegisterSubtype(typeof(TokenAuthRequest), AuthKind.Token.ToJsonString())
                                           .SerializeDiscriminatorProperty()
                                           .Build());

            _jsonSerializer.Converters.Add(JsonSubtypesConverterBuilder
                                           .Of(typeof(IAuthIdentifier), @"type")
                                           .RegisterSubtype(typeof(UserAuthIdentifier), UserAuthIdentifier.ToJsonString())
                                           .RegisterSubtype(typeof(ThirdPartyAuthIdentifier),
                                                            ThirdPartyAuthIdentifier.ToJsonString())
                                           .RegisterSubtype(typeof(PhoneAuthIdentifier), PhoneAuthIdentifier.ToJsonString())
                                           .SerializeDiscriminatorProperty()
                                           .Build());
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Occurs when a message is received.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private Task OnMessageReceived(MqttApplicationMessageReceivedEventArgs e)
        {
            return(Task.Run(() =>
            {
                try
                {
                    if (!e.ApplicationMessage.Topic.StartsWith("emitter"))
                    {
                        var handlers = this.Trie.Match(e.ApplicationMessage.Topic);
                        // Invoke every handler matching the channel
                        foreach (MessageHandler handler in handlers)
                        {
                            handler(e.ApplicationMessage.Topic, e.ApplicationMessage.Payload);
                        }

                        if (handlers.Count == 0)
                        {
                            DefaultMessageHandler?.Invoke(e.ApplicationMessage.Topic, e.ApplicationMessage.Payload);
                        }
                        return;
                    }

                    // Did we receive a keygen response?
                    if (e.ApplicationMessage.Topic == "emitter/keygen/")
                    {
                        // Deserialize the response
                        var response = KeygenResponse.FromBinary(e.ApplicationMessage.Payload);
                        if (response == null || response.Status != 200)
                        {
                            this.InvokeError(response.Status);
                            return;
                        }

                        // Call the response handler we have registered previously
                        // TODO: get rid of the handler afterwards, or refac keygen
                        if (this.KeygenHandlers.ContainsKey(response.Channel))
                        {
                            ((KeygenHandler)this.KeygenHandlers[response.Channel])(response);
                        }
                        return;
                    }

                    if (e.ApplicationMessage.Topic == "emitter/presence/")
                    {
                        var presenceEvent = PresenceEvent.FromBinary(e.ApplicationMessage.Payload);

                        var handlers = this.PresenceTrie.Match(presenceEvent.Channel);
                        // Invoke every handler matching the channel
                        foreach (PresenceHandler handler in handlers)
                        {
                            handler(presenceEvent);
                        }

                        if (handlers.Count == 0)
                        {
                            DefaultPresenceHandler?.Invoke(presenceEvent);
                        }

                        return;
                    }

                    if (e.ApplicationMessage.Topic == "emitter/error/")
                    {
                        var errorEvent = ErrorEvent.FromBinary(e.ApplicationMessage.Payload);
                        var emitterException = new EmitterException((EmitterEventCode)errorEvent.Status, errorEvent.Message);

                        InvokeError(emitterException);
                        return;
                    }

                    if (e.ApplicationMessage.Topic == "emitter/me/")
                    {
                        var meResponse = MeResponse.FromBinary(e.ApplicationMessage.Payload);
                        Me?.Invoke(meResponse);

                        return;
                    }
                    return;
                }
                catch (Exception ex)
                {
                    this.InvokeError(ex);
                    return;
                }
            }));
        }