Пример #1
0
        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();
        }
Пример #2
0
        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;
        }