internal SnippetHighlighter(IHubContext hubContext, HighlighterDbContext dbContext) { if (hubContext == null) { throw new ArgumentNullException("hubContext"); } if (dbContext == null) { throw new ArgumentNullException("dbContext"); } _hubContext = hubContext; _dbContext = dbContext; }
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(); } }
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); } } }
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); } } }