Ejemplo n.º 1
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            PopulateCurrentSessionData();

            AppHub = MsmqMessageHub.Create()
                     .WithConfiguration(new MsmqHubConfiguration
            {
                RemoteQueuePath = @"FormatName:DIRECT=OS:BDRISCOLL-PC2\private$\AppHub"
            });

            AppHub.Connect().Wait();

            AppHub.Channel("Users").AddReceiver("Add", (userData) =>
            {
                return(Task.Factory.StartNew(async() =>
                {
                    RemoteUser user = userData as RemoteUser;
                    if (user != null)
                    {
                        RemoteUser existing = Session.Current.AllUsers.FirstOrDefault(u => u.Id == user.Id);
                        if (existing != null)
                        {
                            await App.Current.Dispatcher.InvokeAsync(() => Session.Current.AllUsers.Remove(existing));
                        }

                        await App.Current.Dispatcher.InvokeAsync(() => Session.Current.AllUsers.Add(user));
                    }
                }));
            }, channelReceiverId);

            App.AppHub.Channel("Users").AddReceiver("Remove", (userData) =>
            {
                return(Task.Factory.StartNew(async() =>
                {
                    RemoteUser user = userData as RemoteUser;
                    if (user != null)
                    {
                        RemoteUser existing = Session.Current.AllUsers.FirstOrDefault(u => u.Id == user.Id);
                        if (existing != null)
                        {
                            await App.Current.Dispatcher.InvokeAsync(() => Session.Current.AllUsers.Remove(existing));
                        }
                    }
                }));
            }, channelReceiverId);

            App.AppHub.Channel("Content").AddReceiver("Update", (contentData) =>
            {
                return(Task.Factory.StartNew(() =>
                {
                    string content = contentData as string;
                    Session.Current.Content = content ?? string.Empty;
                }));
            }, channelReceiverId);

            Session.Current.PropertyChanged      += Session_PropertyChanged;
            Session.Current.User.PropertyChanged += User_PropertyChanged;
        }
Ejemplo n.º 2
0
        public void ShouldHaveValuesConfiguredAfterWithConfiguration()
        {
            IRemoteMessageHub test = MsmqMessageHub.Create();

            test.Configure <MsmqHubConfiguration>(c =>
            {
                c.RemoteQueuePath = $".\\private$\\{test.Id}";
            });
        }
Ejemplo n.º 3
0
        public void LocalQueueShouldExistAfterConnect()
        {
            IRemoteMessageHub test = MsmqMessageHub.Create();

            test.Configure <MsmqHubConfiguration>(c =>
            {
                c.RemoteQueuePath = $".\\private$\\{test.Id}";
            });

            test.Connect();

            Assert.IsTrue(MessageQueue.Exists($".\\private$\\{test.Id}"));
        }
Ejemplo n.º 4
0
        public void ShouldThrowExceptionIfRemoteQueueNameIsNotSet()
        {
            try
            {
                IRemoteMessageHub test = MsmqMessageHub.Create();
                test.Connect();

                Assert.Fail();
            }
            catch (Exception ex)
            {
                Assert.IsInstanceOfType(ex, typeof(InvalidOperationException));
            }
        }
Ejemplo n.º 5
0
        public void LocalQueueShouldNotExistAfterDisconnect()
        {
            IRemoteMessageHub test = MsmqMessageHub.Create();

            test = test.WithConfiguration(new MsmqHubConfiguration
            {
                RemoteQueuePath = $".\\private$\\{test.Id}"
            });

            test.Connect();

            test.Disconnect();

            Assert.IsFalse(MessageQueue.Exists($".\\private$\\{test.Id}"));
        }
Ejemplo n.º 6
0
        static void Main(string[] args)
        {
            IRemoteMessageHub msgHub = WcfMessageHub.Create()
                                       .WithConfiguration(new WcfMessageHubConfiguration {
                RemoteEndpoint = "net.tcp://localhost:9099/DemoHub",
                Binding        = new NetTcpBinding(),
                UseEncryption  = true
            });

            msgHub.Connect().Wait();

            Guid userGuid = msgHub.Channel("Default").AddReceiver("public", (msg) =>
            {
                ChatMessage message = msg as ChatMessage;
                if (message != null)
                {
                    message.Received = DateTime.Now;
                    Console.WriteLine(message.ToString());
                }
                return(Task.CompletedTask);
            });

            string username = "******";

            Console.Write("Enter your username: "******"Welcome, {username}");

            ChatMessage joined = new ChatMessage
            {
                Username    = "******",
                MessageText = $"{username} has joined."
            };

            msgHub.Channel("Default").Send("public", joined).Wait();

            string outgoingMessage = Console.ReadLine();

            while (outgoingMessage != CMD_EXIT && outgoingMessage != CMD_QUIT)
            {
                ChatMessage chat = new ChatMessage
                {
                    Username    = username,
                    MessageText = outgoingMessage
                };

                msgHub.Channel("Default").Send("public", chat).Wait();

                outgoingMessage = Console.ReadLine();
            }

            msgHub.Channel("Default").RemoveReceiver("public", userGuid);

            ChatMessage left = new ChatMessage
            {
                Username    = "******",
                MessageText = $"{username} has left."
            };

            msgHub.Channel("Default").Send("public", left).Wait();

            msgHub.Disconnect();
        }
Ejemplo n.º 7
0
        static void Main(string[] args)
        {
            using (MsmqMessageHubService service = new MsmqMessageHubService(".\\private$\\AppHub", new AppConnectedClientRepository <MsmqConnectedClient>()))
                using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost"))
                {
                    IRemoteMessageHub stateHub = MsmqMessageHub.Create().WithConfiguration(new MsmqHubConfiguration
                    {
                        RemoteQueuePath = ".\\private$\\AppHub"
                    });

                    stateHub.Connect().Wait();

                    Guid stateHubChannelId = Guid.NewGuid();

                    stateHub.Channel("Users").AddReceiver("Add", (userData) =>
                    {
                        return(Task.Factory.StartNew(async() =>
                        {
                            RemoteUser user = userData as RemoteUser;
                            if (user != null)
                            {
                                string serializedUser = JsonConvert.SerializeObject(user);
                                IDatabase db = redis.GetDatabase();
                                if (await db.SetContainsAsync("AllUsers", serializedUser))
                                {
                                    await db.SetRemoveAsync("AllUsers", serializedUser);
                                }

                                await db.SetAddAsync("AllUsers", serializedUser);
                            }
                        }));
                    }, stateHubChannelId);

                    stateHub.Channel("Users").AddReceiver("Remove", (userData) =>
                    {
                        return(Task.Factory.StartNew(async() =>
                        {
                            RemoteUser user = userData as RemoteUser;
                            if (user != null)
                            {
                                string serializedUser = JsonConvert.SerializeObject(user);
                                IDatabase db = redis.GetDatabase();
                                if (await db.SetContainsAsync("AllUsers", serializedUser))
                                {
                                    await db.SetRemoveAsync("AllUsers", serializedUser);
                                }
                            }
                        }));
                    }, stateHubChannelId);

                    stateHub.Channel("Content").AddReceiver("Update", (contentData) =>
                    {
                        return(Task.Factory.StartNew(async() =>
                        {
                            string content = contentData as string;
                            IDatabase db = redis.GetDatabase();
                            await db.StringSetAsync("Content", content);
                        }));
                    }, stateHubChannelId);

                    Console.ReadKey();
                    redis.GetDatabase().KeyDelete("AllUsers");
                    redis.GetDatabase().KeyDelete("Content");

                    stateHub.Channel("Users").RemoveReceiver("Add", stateHubChannelId);
                    stateHub.Channel("Users").RemoveReceiver("Remove", stateHubChannelId);
                    stateHub.Channel("Content").RemoveReceiver("Update", stateHubChannelId);
                    stateHub.Disconnect();
                }
        }