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; }
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(); }
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(); } }