Пример #1
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            SensorServer Extension;

            if (Client.TryGetTag("ProvisioningClient", out object Obj) && Obj is ProvisioningClient ProvisioningClient)
            {
                Extension = new SensorServer(Client, ProvisioningClient, true);
            }
            else
            {
                Extension = new SensorServer(Client, true);
            }

            Client.SetTag("SensorServer", Extension);

            Extension.OnExecuteReadoutRequest += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnExecuteReadoutRequest",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.CompletedTask);
        }
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            SensorServer Extension;

            if (Client.TryGetTag("ProvisioningClient", out object Obj) && Obj is ProvisioningClient ProvisioningClient)
            {
                Extension = new SensorServer(Client, ProvisioningClient, true);
            }
            else
            {
                Extension = new SensorServer(Client, true);
            }

            Client.SetTag("SensorServer", Extension);

            Extension.OnExecuteReadoutRequest += (Sender, e) =>
            {
                if (!this.Model.ExternalEvent(Instance, "OnExecuteReadoutRequest",
                                              new KeyValuePair <string, object>("e", e),
                                              new KeyValuePair <string, object>("Client", Client)))
                {
                    e.ReportErrors(true, new ThingError(ThingReference.Empty, "No event handler registered on sensor."));
                }

                return(Task.CompletedTask);
            };

            return(Task.FromResult <object>(Extension));
        }
Пример #3
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ControlServer Extension;

            if (Client.TryGetTag("ProvisioningClient", out object Obj) && Obj is ProvisioningClient ProvisioningClient)
            {
                Extension = new ControlServer(Client, ProvisioningClient);
            }
            else
            {
                Extension = new ControlServer(Client);
            }

            Client.SetTag("ControlServer", Extension);

            Extension.OnGetControlParameters += (Node) =>
            {
                this.Model.ExternalEvent(Instance, "OnGetControlParameters",
                                         new KeyValuePair <string, object>("Node", Node),
                                         new KeyValuePair <string, object>("Client", Client));

                List <ControlParameter> Parameters = new List <ControlParameter>();

                foreach (ControlParameterNode Parameter in this.parameters)
                {
                    Parameter.AddParameters(Parameters, Instance);
                }

                return(Task.FromResult <ControlParameter[]>(Parameters.ToArray()));
            };

            return(Task.FromResult <object>(Extension));
        }
Пример #4
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ControlServer Extension;

            if (Client.TryGetTag("ProvisioningClient", out object Obj) && Obj is ProvisioningClient ProvisioningClient)
            {
                Extension = new ControlServer(Client, ProvisioningClient);
            }
            else
            {
                Extension = new ControlServer(Client);
            }

            Client.SetTag("ControlServer", Extension);

            Extension.OnGetControlParameters += (Node) =>
            {
                this.Model.ExternalEvent(Instance, "OnGetControlParameters",
                                         new KeyValuePair <string, object>("Node", Node),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.FromResult <ControlParameter[]>(new ControlParameter[0]));
            };

            return(Task.CompletedTask);
        }
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            SensorClient Extension = new SensorClient(Client);

            Client.SetTag("SensorClient", Extension);

            return(Task.FromResult <object>(Extension));
        }
Пример #6
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            SensorClient Extension = new SensorClient(Client);

            Client.SetTag("SensorClient", Extension);

            return(Task.CompletedTask);
        }
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            if (Client.ContainsTag("SensorServer"))
            {
                throw new Exception("Define provisioning clients before any sensor server extensions.");
            }

            if (Client.ContainsTag("ControlServer"))
            {
                throw new Exception("Define provisioning clients before any control server extensions.");
            }

            if (Client.ContainsTag("ConcentratorServer"))
            {
                throw new Exception("Define provisioning clients before any concentrator server extensions.");
            }

            ProvisioningClient Extension = new ProvisioningClient(Client, this.componentAddress);

            Client.SetTag("ProvisioningClient", Extension);

            Extension.CanControlQuestion += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnExecuteReadoutRequest",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.CanReadQuestion += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "CanReadQuestion",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.IsFriendQuestion += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "IsFriendQuestion",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.CacheCleared += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "CacheCleared",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));
            };

            return(Task.FromResult <object>(Extension));
        }
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            SynchronizationClient Extension = new SynchronizationClient(Client);

            Client.SetTag("SynchronizationClient", Extension);

            Extension.OnUpdated += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnUpdated",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));
            };

            return(Task.CompletedTask);
        }
Пример #9
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ConcentratorClient Extension = new ConcentratorClient(Client);

            Client.SetTag("ConcentratorClient", Extension);

            Extension.OnEvent += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnEvent",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.FromResult <object>(Extension));
        }
Пример #10
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            AvatarClient Extension = new AvatarClient(Client);

            Client.SetTag("Avatar", Extension);

            Extension.AvatarAdded += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "AvatarAdded",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.AvatarRemoved += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "AvatarRemoved",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.AvatarUpdated += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "AvatarUpdated",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.VCardReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "VCardReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.FromResult <object>(Extension));
        }
Пример #11
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ConcentratorServer Extension;

            if (!Client.TryGetTag("ProvisioningClient", out object Obj) || !(Obj is ProvisioningClient ProvisioningClient))
            {
                ProvisioningClient = null;
            }

            if (!Client.TryGetTag("ThingRegistryClient", out Obj) || !(Obj is ThingRegistryClient ThingRegistryClient))
            {
                ThingRegistryClient = null;
            }

            Extension = new ConcentratorServer(Client, ThingRegistryClient, ProvisioningClient);

            Client.SetTag("ConcentratorServer", Extension);

            return(Task.FromResult <object>(Extension));
        }
Пример #12
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            if (Client.ContainsTag("ConcentratorServer"))
            {
                throw new Exception("Define thing registry clients before any concentrator server extensions.");
            }

            ThingRegistryClient Extension = new ThingRegistryClient(Client, this.componentAddress);

            Client.SetTag("ThingRegistryClient", Extension);

            Extension.Claimed += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "Claimed",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.Disowned += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "Disowned",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.Removed += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "Removed",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.CompletedTask);
        }
Пример #13
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            PepClient Extension = new PepClient(Client);

            Client.SetTag("PEP", Extension);

            Extension.NonPepItemNotification += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "NonPepItemNotification",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.NonPepItemRetraction += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "NonPepItemRetraction",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.OnUserActivity += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnUserActivity",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.OnUserAvatarMetaData += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnUserAvatarMetaData",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.OnUserLocation += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnUserLocation",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.OnUserMood += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnUserMood",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.OnUserTune += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OnUserTune",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.CompletedTask);
        }
Пример #14
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        public override Task Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            PubSubClient Extension = new PubSubClient(Client, this.componentAddress);

            Client.SetTag("PubSub", Extension);

            Extension.AffiliationNotification += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "AffiliationNotification",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.ItemNotification += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "ItemNotification",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.ItemRetracted += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "ItemRetracted",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.NodePurged += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "NodePurged",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.SubscriptionRequest += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "SubscriptionRequest",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.SubscriptionStatusChanged += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "SubscriptionStatusChanged",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.CompletedTask);
        }
Пример #15
0
 /// <summary>
 /// Adds the extension to the client.
 /// </summary>
 /// <param name="Instance">Actor instance.</param>
 /// <param name="Client">XMPP Client</param>
 /// <returns>Extension object.</returns>
 public abstract Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client);
Пример #16
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override async Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            ContractsClient Extension = new ContractsClient(Client, this.componentAddress);
            await Extension.LoadKeys(true);

            Client.SetTag("ContractsClient", Extension);

            Extension.ContractDeleted += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "ContractDeleted",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.ContractSigned += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "ContractSigned",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.ContractUpdated += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "ContractUpdated",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.IdentityUpdated += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "IdentityUpdated",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionForContractReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionForContractReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionedContractResponseReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionedContractResponseReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionForIdentityReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionForIdentityReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionedIdentityResponseReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionedIdentityResponseReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionForSignatureReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionForSignatureReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionedSignatureResponseReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionedSignatureResponseReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionForPeerReviewIDReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionForPeerReviewIDReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PetitionedPeerReviewIDResponseReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PetitionedPeerReviewIDResponseReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Extension);
        }
Пример #17
0
        /// <summary>
        /// Adds the extension to the client.
        /// </summary>
        /// <param name="Instance">Actor instance.</param>
        /// <param name="Client">XMPP Client</param>
        /// <returns>Extension object.</returns>
        public override Task <object> Add(IActor Instance, Waher.Networking.XMPP.XmppClient Client)
        {
            MultiUserChatClient Extension = new MultiUserChatClient(Client, this.componentAddress);

            Client.SetTag("MUC", Extension);

            Extension.OccupantPresence += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OccupantPresence",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.OccupantRequest += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "OccupantRequest",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.PrivateMessageReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "PrivateMessageReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RegistrationRequest += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RegistrationRequest",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomDeclinedInvitationReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomDeclinedInvitationReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomDestroyed += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomDestroyed",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomInvitationReceived += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomInvitationReceived",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomMessage += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomMessage",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomOccupantMessage += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomOccupantMessage",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomPresence += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomPresence",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            Extension.RoomSubject += (Sender, e) =>
            {
                this.Model.ExternalEvent(Instance, "RoomSubject",
                                         new KeyValuePair <string, object>("e", e),
                                         new KeyValuePair <string, object>("Client", Client));

                return(Task.CompletedTask);
            };

            return(Task.FromResult <object>(Extension));
        }