public async override Task OnConnectedAsync() { string group = Context.GetHttpContext().Request.Query["group"]; CodeEditorUser user = new CodeEditorUser(Context.ConnectionId); if (string.IsNullOrEmpty(group) || group == "null") { string groupName = Convert.ToBase64String(guid.ToByteArray()); groupName = groupName.Replace("=", ""); groupName = groupName.Replace("+", ""); groupName = groupName.Replace("/", ""); user.Role = CodeEditorRole.Driver; user.GroupName = groupName; _groups.Add(groupName, user); await Groups.AddToGroupAsync(Context.ConnectionId, groupName); await Clients.Client(Context.ConnectionId).ReceiveGroup(groupName); } else { user.GroupName = group; if (CanJoinGroup(group)) { CodeEditorUser partner = _groups.GetConnections(group).First(); if (partner.Role == CodeEditorRole.Driver) { user.Role = CodeEditorRole.Navigator; } else { user.Role = CodeEditorRole.Driver; } _groups.Add(group, user); await Groups.AddToGroupAsync(Context.ConnectionId, group); } else { await Clients.Client(Context.ConnectionId).ReceiveError(); return; } } await Clients.Client(Context.ConnectionId).ReceiveRole(user.Role); ReadCodeResult code = await _queryDispatcher.DisptachAsync <ReadCodeQuery, ReadCodeResult>(new ReadCodeQuery(_groups.FindKeys(Context.ConnectionId).First())); await Clients.Client(Context.ConnectionId).ReceiveCodeUpdate(code.Lines); await base.OnConnectedAsync(); }
public void ConnectionMappingFindKeysTest() { ConnectionMapping <string> groups = new ConnectionMapping <string>(); string firstGroup = "group_1"; CodeEditorUser g1FirstUser = new CodeEditorUser("g1_connection_1"); g1FirstUser.GroupName = firstGroup; CodeEditorUser g1SecondUser = new CodeEditorUser("g1_connection_2"); g1SecondUser.GroupName = firstGroup; string secondGroup = "group_2"; CodeEditorUser g2FirstUser = new CodeEditorUser("g2_connection_1"); g2FirstUser.GroupName = secondGroup; groups.Add(firstGroup, g1FirstUser); groups.Add(firstGroup, g1SecondUser); groups.Add(secondGroup, g2FirstUser); Assert.Equal(firstGroup, groups.FindKeys("g1_connection_1").ElementAtOrDefault(0)); Assert.Equal(firstGroup, groups.FindKeys("g1_connection_2").ElementAtOrDefault(0)); Assert.Equal(secondGroup, groups.FindKeys("g2_connection_1").ElementAtOrDefault(0)); return; }