Esempio n. 1
0
        public override async Task <TotalTimeResponse> GetTotalTime(TotalTimeRequest request, ServerCallContext context)
        {
            long totalTime = 0, activeSince = -1;

            // 요청받은 기간 내의 Active 및 Idle activity만 가져온다
            var activities = from activity in _db.GetActivities()
                             where activity.Time >= request.Range.Start.ToDateTime() && activity.Time <= request.Range.End.ToDateTime()
                             where activity.Action == ActionType.Active || activity.Action == ActionType.Idle
                             orderby activity.Time
                             select activity;

            await foreach (var activity in activities)
            {
                var activityTicks = activity.Time.Ticks;
                switch (activity.Action)
                {
                case ActionType.Active:
                    if (activeSince == -1)
                    {
                        activeSince = activityTicks;
                    }
                    break;

                case ActionType.Idle:
                    if (activeSince != -1)
                    {
                        totalTime  += activityTicks - activeSince;
                        activeSince = -1;
                    }
                    break;
                }
            }

            return(new TotalTimeResponse()
            {
                TotalTime = Duration.FromTimeSpan(new TimeSpan(totalTime))
            });
        }
Esempio n. 2
0
 public override Task <TotalTimeResponse> GetTotalTime(TotalTimeRequest request, ServerCallContext context)
 {
     throw new NotImplementedException();
 }