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); }
/// <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; }
public void OnPresenceChanged(Device device, PresenceEvent presenceEvent) { Console.WriteLine("Received Presence Update"); }
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()); }
/// <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; } })); }