public async Task <object> GetFrame(ITicketHolder ticketHolder, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                return(null);
            }

            var myState = ticketHolder.GetTicket <UserState>();

            // this is our DB poll interval
            if (myState != null && (DateTime.UtcNow - myState.Created).TotalSeconds < 10)
            {
                return(null);
            }

            // find useraccount
            var useraccount = await _userService.FindById(context.User.UserId());

            if (useraccount == null)
            {
                useraccount = UserAccount.Map(context.User);
            }

            if (myState != null && useraccount.CalculateChecksum() == myState.Checksum)
            {
                return(null);
            }

            ticketHolder.UpdateTicket(new UserState {
                Created = DateTime.UtcNow, Checksum = useraccount.CalculateChecksum()
            });

            return(UserAccountViewModel.Map(useraccount));
        }
예제 #2
0
        public async Task <object> GetFrame(ITicketHolder ticket, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            var myState = ticket.GetTicket <MyState>();

            if (myState != null)
            {
                if (DateTime.UtcNow < myState.NextRefresh)
                {
                    return(null);
                }
            }

            int counter = 0;

            if (myState != null)
            {
                counter = myState.CallCount + 1;
            }

            ticket.UpdateTicket(new MyState {
                NextRefresh = DateTime.UtcNow.AddMilliseconds(100), CallCount = counter
            });

            // simulate some work
            await Task.Delay(2);

            return(new PingResponse {
                SampleHeader = (context as CustomContext)?.SampleHeader, CallCount = counter
            });
        }
예제 #3
0
        public Task <object> GetFrame(ITicketHolder ticket, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            var myState = ticket.GetTicket <MyState>();

            ticket.UpdateTicket(new { created = DateTime.UtcNow });

            return(Task.FromResult((object)new { hello = "world" }));
        }
        public Task <object> GetFrame(ITicketHolder ticket, IContext context, ICitylineWriter writer, CancellationToken cancellationToken = default(CancellationToken))
        {
            var myState = ticket.GetTicket <MyState>();

            ticket.UpdateTicket(new { created = DateTime.UtcNow });

            return(Task.FromResult(sampleObject));
        }
예제 #5
0
        public async Task <object> GetFrame(ITicketHolder ticketHolder, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                return(null);
            }

            var myState = ticketHolder.GetTicket <ChatState>();

            // this is our DB poll interval
            if (myState != null && (DateTime.UtcNow - myState.Created).TotalSeconds < 1)
            {
                return(null);
            }

            // find useraccount
            var useraccount = await _userService.FindById(context.User.UserId());

            // get orders and calculate status
            var monikers = myState?.Monikers ?? new Dictionary <string, string>();

            var update = await _chatService.GetUserUpdate(context.User, monikers);

            foreach (var key in update.Keys)
            {
                if (update[key].Any())
                {
                    monikers[key] = update[key].Max(m => m.Moniker);
                }
            }

            ticketHolder.UpdateTicket(new ChatState {
                Created = DateTime.UtcNow, Monikers = monikers
            });

            var all = update.Keys
                      .SelectMany(key => update[key])
                      .ToList();

            var userIds      = all.Select(m => m.UserId).Distinct();
            var userAccounts = await _userService.LookupUsers(userIds);

            var lookup = userAccounts.ToDictionary(m => m.Id, m => m) as IDictionary <string, UserAccount>;

            return(all
                   .Select(sentence => SentenceViewModel.Map(sentence, lookup))
                   .ToList());
        }
예제 #6
0
        public Task <object> GetFrame(ITicketHolder ticket, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            var myState = ticket.GetTicket <object>();

            if (myState != null)
            {
                return(Task.FromResult((object)null));
            }

            ticket.UpdateTicket(new {});
            return(Task.FromResult((object)new
            {
                Version = System.Reflection.Assembly.GetEntryAssembly().GetName().Version,
                Started = started,
                ClientStarted = DateTime.UtcNow
            }));
        }
예제 #7
0
        public async Task <object> GetFrame(ITicketHolder ticket, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            var myState = ticket.GetTicket <MyState>();

            if (myState != null)
            {
                if ((DateTime.UtcNow - myState.Created).TotalSeconds < 5)
                {
                    return(null);
                }
            }

            ticket.UpdateTicket(new MyState());

            // simulate some work
            await Task.Delay(2);

            return(new { Ping = DateTime.UtcNow });
        }
예제 #8
0
        public async Task <object> GetFrame(ITicketHolder ticketHolder, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                return(null);
            }

            var myState = ticketHolder.GetTicket <ChannelState>();

            // this is our DB poll interval
            if (myState != null && (DateTime.UtcNow - myState.Created).TotalSeconds < 1)
            {
                return(null);
            }

            // find useraccount
            var useraccount = await _userService.FindById(context.User.UserId());

            if (!useraccount.Channels.Contains("global"))
            {
                useraccount.Channels.Add("global");
            }

            string checksum;

            using (var md5 = MD5.Create())
                checksum = new Guid(md5.ComputeHash(Encoding.UTF8.GetBytes(string.Join(", ", useraccount.Channels)))).ToString("N");

            if (myState != null && myState.Checksum == checksum)
            {
                return(null);
            }

            ticketHolder.UpdateTicket(new ChannelState {
                Created = DateTime.UtcNow, Checksum = checksum
            });

            return(await _channelService.GetChannels(context.User, useraccount.Channels));
        }
예제 #9
0
        public async Task <object> GetFrame(ITicketHolder ticket, IContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            var myState = ticket.GetTicket <MyState>();

            if (myState != null)
            {
                if (DateTime.UtcNow < myState.NextRefresh)
                {
                    return(null);
                }
            }

            var seconds = random.Next(0, 30);

            ticket.UpdateTicket(new MyState {
                NextRefresh = DateTime.UtcNow.AddSeconds(seconds)
            });

            // simulate some work
            await Task.Delay(2);

            return(new { NextResponseInSeconds = seconds });
        }
예제 #10
0
 private void RegisterUser(IUserFactory userFactory)
 {
     ITicketHolder user = userFactory.CreateUser();
 }
예제 #11
0
 static void RegisterUser(IUserFactory userFactory)
 {
     ITicketHolder holder = userFactory.CreateUser();
 }