예제 #1
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="UserService"/> class.
        /// </summary>
        /// <param name="soulseekClient"></param>
        /// <param name="stateMutator"></param>
        /// <param name="optionsMonitor"></param>
        public UserService(
            ISoulseekClient soulseekClient,
            IStateMutator <State> stateMutator,
            IOptionsMonitor <Options> optionsMonitor)
        {
            Client = soulseekClient;

            StateMutator = stateMutator;

            OptionsMonitor = optionsMonitor;
            OptionsMonitor.OnChange(options => Configure(options));

            // updates may be sent unsolicited from the server, so update when we get them.
            // binding these events will cause multiple redundant round trips when initially watching a user
            // or when explicitly requesting via GetStatus/GetStatistics. this is wasteful, but there's no functional side effect.
            Client.UserStatisticsChanged += (_, userStatistics) => UpdateStatistics(userStatistics.Username, userStatistics.ToStatistics());
            Client.UserStatusChanged     += (sender, userStatus) =>
            {
                UpdateStatus(userStatus.Username, userStatus.ToStatus());

                // the server doesn't send statistics events by itself, so when a user status changes, fetch stats at the same time.
                _ = GetStatisticsAsync(userStatus.Username);
            };

            Client.Connected += (_, _) => Reset();
            Client.LoggedIn  += (_, _) => Configure(OptionsMonitor.CurrentValue, force: true);

            Configure(OptionsMonitor.CurrentValue);
        }
예제 #2
0
파일: RoomService.cs 프로젝트: slskd/slskd
        /// <summary>
        ///     Initializes a new instance of the <see cref="RoomService"/> class.
        /// </summary>
        /// <param name="soulseekClient"></param>
        /// <param name="optionsMonitor"></param>
        /// <param name="stateMutator"></param>
        /// <param name="roomTracker"></param>
        public RoomService(
            ISoulseekClient soulseekClient,
            IOptionsMonitor <Options> optionsMonitor,
            IStateMutator <State> stateMutator,
            IRoomTracker roomTracker)
        {
            Client = soulseekClient;

            StateMutator   = stateMutator;
            OptionsMonitor = optionsMonitor;

            RoomTracker = roomTracker;

            Client.LoggedIn += Client_LoggedIn;

            Client.RoomJoined          += Client_RoomJoined;
            Client.RoomLeft            += Client_RoomLeft;
            Client.RoomMessageReceived += Client_RoomMessageReceived;
        }
예제 #3
0
 public State()
 {
     this.mutator = StateMutator.For(this.GetType());
     this.Version = 0;
 }
예제 #4
0
파일: State.cs 프로젝트: mfelicio/NDomain
 public State()
 {
     this.mutator = StateMutator.For(this.GetType());
     this.Version = 0;
 }
예제 #5
0
 protected State()
 {
     mutator = StateMutator.For(GetType());
     Version = InitialVersion;
 }