Ejemplo n.º 1
0
        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))));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }