Ejemplo n.º 1
0
        private async Task DirectConnectionJoinGroup(string connectionString)
        {
            var serviceManager = new ServiceManagerBuilder().WithOptions(option =>
            {
                option.ConnectionString     = connectionString;
                option.ServiceTransportType = ServiceTransportType.Transient;
            }).Build();

            var hubContext = await serviceManager.CreateHubContextAsync(SignalRConstants.DefaultRestHubName);

            var connectionCount = _connections.Count;

            if (connectionCount >= _groupCount)
            {
                for (var i = 0; i < _connections.Count; i++)
                {
                    var userId = SignalRUtils.GenClientUserIdFromConnectionIndex(_connectionIndex[i]);
                    try
                    {
                        await hubContext.UserGroups.AddToGroupAsync(
                            userId,
                            SignalRUtils.GroupName(_type, _connectionIndex[i] % _groupCount));

                        _statisticsCollector.IncreaseJoinGroupSuccess();
                    }
                    catch (Exception e)
                    {
                        _statisticsCollector.IncreaseJoinGroupFail();
                        Log.Error($"Fail to join group: {e.Message}");
                    }
                }
            }
            else
            {
                for (var i = 0; i < _groupCount; i++)
                {
                    var userId = SignalRUtils.GenClientUserIdFromConnectionIndex(i);
                    try
                    {
                        await hubContext.UserGroups.AddToGroupAsync(
                            userId,
                            SignalRUtils.GroupName(_type, i));

                        _statisticsCollector.IncreaseJoinGroupSuccess();
                    }
                    catch (Exception e)
                    {
                        _statisticsCollector.IncreaseJoinGroupFail();
                        Log.Error($"Fail to join group: {e.Message}");
                    }
                }
            }
        }
Ejemplo n.º 2
0
        protected virtual async Task JoinLeaveGroup(int localIndex, IDictionary <string, object> data)
        {
            // Extract data
            data.TryGetTypedValue(SignalRConstants.GroupName, out string groupName, Convert.ToString);
            data.TryGetTypedValue(_isIngroup, out bool isInGroup, Convert.ToBoolean);

            // Join or leave groups
            if (isInGroup)
            {
                try
                {
                    await Connections[localIndex].SendAsync(SignalRConstants.LeaveGroupCallbackName, groupName);
                }
                catch
                {
                    StatisticsCollector.IncreaseLeaveGroupFail();
                }
            }
            else
            {
                try
                {
                    await Connections[localIndex].SendAsync(SignalRConstants.JoinGroupCallbackName, groupName);
                }
                catch
                {
                    StatisticsCollector.IncreaseJoinGroupFail();
                }
            }

            data[_isIngroup] = !isInGroup;
        }
Ejemplo n.º 3
0
 public static async Task JoinToGroup(
     IHubConnectionAdapter connection,
     string groupName,
     StatisticsCollector statisticsCollector)
 {
     try
     {
         await connection.SendAsync(SignalRConstants.JoinGroupCallbackName, groupName);
     }
     catch
     {
         statisticsCollector.IncreaseJoinGroupFail();
     }
 }