internal SnippetHighlighter(IHubContext hubContext, HighlighterDbContext dbContext)
        {
            if (hubContext == null)
            {
                throw new ArgumentNullException("hubContext");
            }
            if (dbContext == null)
            {
                throw new ArgumentNullException("dbContext");
            }

            _hubContext = hubContext;
            _dbContext  = dbContext;
        }
Beispiel #2
0
        public static void HighlightSnippet(int snippetId)
        {
            using (var context = new HighlighterDbContext())
            {
                var snippet = context.Snippets.Find(snippetId);
                snippet.HighlightedSource = HighlightSource(snippet.Source);
                snippet.HighlightedAt     = DateTime.UtcNow;

                context.SaveChanges();

                var hubContext = GlobalHost.ConnectionManager.GetHubContext <SnippetHub>();
                hubContext.Clients.Group(SnippetHub.GetGroup(snippet.Id))
                .highlight(snippet.Id, snippet.HighlightedSource);
            }
        }
        // Process a job
        public static void HighlightSnippet(int snippetId)
        {
            using (var db = new HighlighterDbContext())
            {
                var snippet = db.CodeSnippets.Find(snippetId);
                if (snippet == null)
                {
                    return;
                }

                snippet.HighlightedCode = HighlightSource(snippet.SourceCode);
                snippet.HighlightedAt   = DateTime.UtcNow;

                db.SaveChanges();
            }
        }
Beispiel #4
0
        public async Task Subscribe(int snippetId)
        {
            await Groups.Add(Context.ConnectionId, GetGroup(snippetId));

            // When a user subscribes a snippet that was already
            // highlighted, we need to send it immediately, because
            // otherwise she will listen for it infinitely.
            using (var db = new HighlighterDbContext())
            {
                var snippet = await db.CodeSnippets
                              .Where(x => x.Id == snippetId && x.HighlightedCode != null)
                              .SingleOrDefaultAsync();

                if (snippet != null)
                {
                    Clients.Client(Context.ConnectionId)
                    .highlight(snippet.Id, snippet.HighlightedCode);
                }
            }
        }
Beispiel #5
0
        public async Task Subscribe(List <string> snippets)
        {
            var snippetIds = snippets.Select(int.Parse).ToArray();
            var groups     = snippetIds.Select(GetGroup).ToArray();

            foreach (var @group in groups)
            {
                await Groups.Add(Context.ConnectionId, group);
            }

            using (var db = new HighlighterDbContext())
            {
                var highlighted = await db.Snippets
                                  .Where(x => snippetIds.Contains(x.Id) && x.HighlightedSource != null)
                                  .ToListAsync();

                foreach (var snippet in highlighted)
                {
                    Clients.Client(Context.ConnectionId)
                    .highlight(snippet.Id, snippet.HighlightedSource);
                }
            }
        }