public RoomModuleViewModel(IRoom room, IMessageBus bus, IUserCache userCache, IChatDocument chatDocument, IClipboardService clipboardService, IGlobalCommands commands) { _room = room; _bus = bus; _userCache = userCache; _chatDocument = chatDocument; Topic = _room.Topic; Users = new ReactiveCollection <UserViewModel>(); UserMessage = String.Empty; PostMessageCommand = new ReactiveCommand(this.ObservableForProperty(vm => vm.UserEditedMessage) .Select(c => c.Value).StartWith(false)); Subscribe(() => PostMessageCommand.Subscribe(HandlePostMessage)); _messages = new List <RoomMessage>(); Subscribe(() => _bus.RegisterMessageSource( _bus.Listen <ConnectionState>() .Where(msg => msg.RoomId == room.Id) .Do(cs => IsConnected = cs.Connected) .Where(cs => cs.Connected) .Delay(TimeSpan.FromSeconds(10), RxApp.TaskpoolScheduler) .Where(_ => _streamingStarted && IsConnected) .Select(_ => new RequestRecentMessagesMessage(_room.Id)))); ; Subscribe( () => _bus.Listen <MessagesReceivedMessage>().Where(msg => msg.RoomId == room.Id).SubscribeUI(HandleMessagesReceived)); Subscribe( () => _bus.Listen <RoomInfoReceivedMessage>().Where(msg => msg.Room.Id == _room.Id).SubscribeUI(HandleRoomInfoReceived)); Subscribe(() => _bus.Listen <UsersUpdatedMessage>().SubscribeUI(HandleUsersUpdated)); _bus.SendMessage(new RequestRecentMessagesMessage(room.Id)); _bus.SendMessage(new RequestRoomInfoMessage(_room.Id)); Subscribe(() => _bus.RegisterMessageSource(Observable.Interval(TimeSpan.FromMinutes(5)).Select( _ => new RequestKeepAliveMessage(_room.Id)))); PasteCommand = new ReactiveCommand(); Subscribe(() => PasteCommand.Select(pc => clipboardService.GetClipboardItem()) .Where(ci => ci != null) .Subscribe(ci => _chatDocument.AddPasteFile(_room, ci))); var leaveRoomCommand = commands.LeaveRoomCommand.OfType <int>().Where(id => id == _room.Id); Subscribe(_bus.RegisterMessageSource(leaveRoomCommand.Select(_ => new RequestStopStreamingMessage(_room.Id)))); Subscribe(_bus.RegisterMessageSource(leaveRoomCommand.Select(_ => new RequestLeaveRoomMessage(_room.Id)))); Subscribe( _bus.RegisterMessageSource( leaveRoomCommand.Select(_ => new ActivateModuleByIdMessage(ModuleNames.MainCampfireView, ModuleIds.Lobby)))); }
public MainCampfireViewModel(ILobbyModule lobbyModule, ILogModule logModule, IMessageBus bus, IModuleCreator creator, IGlobalCommands globalCommands) { _lobbyModule = lobbyModule; _logModule = logModule; _bus = bus; _creator = creator; Modules = new ReactiveCollection <IModule> { _lobbyModule, _logModule }; _bus.Listen <ActivateModuleMessage>().Where(msg => msg.ParentModule == ModuleNames.MainCampfireView) .SubscribeUI(msg => { CurrentModules = Modules.CreateDerivedCollection(module => new ModuleViewModel(module, bus)); }); bus.RegisterMessageSource(bus.Listen <ModuleLoaded>().Where(msg => msg.ModuleName == ModuleNames.MainCampfireView) .Select(_ => new ActivateModuleMessage(ModuleNames.MainCampfireView, _lobbyModule))); _activeModule = _lobbyModule; bus.Listen <RoomPresenceMessage>().SubscribeUI(SyncModuleList); _bus.Listen <ActivateModuleByIdMessage>().Where(msg => msg.ParentModule == ModuleNames.MainCampfireView) .SubscribeUI(HandleActivateModuleById); _bus.Listen <ModuleActivatedMessage>().Where(msg => msg.ParentModule == ModuleNames.MainCampfireView) .SubscribeUI(msg => ActiveModule = msg.Module); _bus.Listen <RequestLeaveRoomMessage>().SubscribeUI(OnRequestLeaveRoomMessage); ActivateModuleCommand = new ReactiveCommand(); ActivateModuleCommand.OfType <ModuleViewModel>().Subscribe(HandleActivateModule); globalCommands.NextModuleCommand.Subscribe(OnNextModuleCommand); globalCommands.PreviousModuleCommand.Subscribe(OnPreviousModuleCommand); }
public MainCampfireViewModel(ILobbyModule lobbyModule, ILogModule logModule, IMessageBus bus, IModuleCreator creator, IGlobalCommands globalCommands) { _lobbyModule = lobbyModule; _logModule = logModule; _bus = bus; _creator = creator; Modules = new ReactiveCollection<IModule>{_lobbyModule, _logModule}; _bus.Listen<ActivateModuleMessage>().Where(msg => msg.ParentModule == ModuleNames.MainCampfireView) .SubscribeUI(msg => { CurrentModules = Modules.CreateDerivedCollection(module => new ModuleViewModel(module, bus)); }); bus.RegisterMessageSource(bus.Listen<ModuleLoaded>().Where(msg => msg.ModuleName == ModuleNames.MainCampfireView) .Select(_ => new ActivateModuleMessage(ModuleNames.MainCampfireView, _lobbyModule))); _activeModule = _lobbyModule; bus.Listen<RoomPresenceMessage>().SubscribeUI(SyncModuleList); _bus.Listen<ActivateModuleByIdMessage>().Where(msg => msg.ParentModule == ModuleNames.MainCampfireView) .SubscribeUI(HandleActivateModuleById); _bus.Listen<ModuleActivatedMessage>().Where(msg => msg.ParentModule == ModuleNames.MainCampfireView) .SubscribeUI(msg => ActiveModule = msg.Module); _bus.Listen<RequestLeaveRoomMessage>().SubscribeUI(OnRequestLeaveRoomMessage); ActivateModuleCommand = new ReactiveCommand(); ActivateModuleCommand.OfType<ModuleViewModel>().Subscribe(HandleActivateModule); globalCommands.NextModuleCommand.Subscribe(OnNextModuleCommand); globalCommands.PreviousModuleCommand.Subscribe(OnPreviousModuleCommand); }