Ejemplo n.º 1
0
        private static void HandleBasicUpOp(string step, ConnectionConfigBuilder connectionConfigBuilder,
                                            ConnectionConfigList connectionAllConfigList, int connectionCnt, List <string> slaveList)
        {
            var isNumeric = int.TryParse(step.Substring(2), out int n);

            if (step.Substring(0, 2) == "up" && isNumeric)
            {
                var AdditionalSendConnCnt = 0;
                var lastOne = false;
                if (step.Substring(0, 2) == "up")
                {
                    if (step.Contains("LastOne"))
                    {
                        AdditionalSendConnCnt = 1;
                        lastOne = true;
                    }
                    else
                    {
                        AdditionalSendConnCnt = Convert.ToInt32(step.Substring(2));
                    }
                }

                connectionAllConfigList = connectionConfigBuilder.UpdateSendConn(connectionAllConfigList,
                                                                                 AdditionalSendConnCnt, connectionCnt, slaveList.Count, lastOne);
            }
        }
Ejemplo n.º 2
0
        public ConnectionConfigList UpdateSendConnPerGroup(ConnectionConfigList configs, List <string> groupNameMatrix, int upNum)
        {
            var groupNameDict = new Dictionary <string, HashSet <int> >();

            for (var i = 0; i < groupNameMatrix.Count; i++)
            {
                foreach (var groupName in groupNameMatrix[i].Split(";").ToList())
                {
                    if (groupNameDict.ContainsKey(groupName))
                    {
                        groupNameDict[groupName].Add(i);
                    }
                    else
                    {
                        groupNameDict[groupName] = new HashSet <int>();
                    }
                }
            }

            foreach (var groupNameIndexSetPair in groupNameDict)
            {
                var indexSet  = groupNameIndexSetPair.Value;
                var indexList = indexSet.ToList();

                if (indexList == null)
                {
                    throw new ArgumentNullException();
                }
                if (indexList.Count == 0)
                {
                    throw new ArgumentOutOfRangeException();
                }

                indexList.Shuffle();
                for (var i = 0; i < indexList.Count; i++)
                {
                    if (i < upNum)
                    {
                        configs.Configs[indexList[i]].SendFlag = true;
                    }
                    else
                    {
                        configs.Configs[indexList[i]].SendFlag = false;
                    }
                }
            }

            return(configs);
        }
Ejemplo n.º 3
0
        public ConnectionConfigList UpdateSendConn(ConnectionConfigList configs, int more, int totalConnection, int slaveCnt, bool lastOne)
        {
            if (lastOne)
            {
                if (configs == null || configs.Configs == null)
                {
                    throw new NullReferenceException();
                }
                else if (configs.Configs.Count == 0)
                {
                    throw new ArgumentOutOfRangeException();
                }

                configs.Configs[configs.Configs.Count - 1].SendFlag = true;
            }
            else
            {
                var curTotalSendConn = GetNewTotalSendingConnectionCount(configs.Configs.ToList());
                var newTotalSendConn = curTotalSendConn + more;
                var curSendConnList  = GetCurrentSendingConnectionCountList(curTotalSendConn, slaveCnt);
                var newSendConnList  = GetCurrentSendingConnectionCountList(newTotalSendConn, slaveCnt);
                var moreSendConnList = GetMoreSendingConnectionCountList(curSendConnList, newSendConnList);

                var beg = 0;
                for (var i = 0; i < slaveCnt; i++)
                {
                    var curConnCnt   = Util.SplitNumber(totalConnection, i, slaveCnt);
                    var end          = beg + curConnCnt;
                    var curConnSlice = configs.Configs.ToList().GetRange(beg, end - beg);
                    var idleConnInds = curConnSlice.Select((val, ind) => new { val, ind })
                                       .Where(z => z.val.SendFlag == false)
                                       .Select(z => z.ind).ToList();
                    idleConnInds.Shuffle();
                    // var curMore = Util.SplitNumber(more, i, slaveCnt);
                    for (int j = 0; j < moreSendConnList[i] && j < idleConnInds.Count; j++)
                    {
                        configs.Configs[idleConnInds[j] + beg].SendFlag = true;
                    }
                    beg = end;
                }
            }

            return(configs);
        }
Ejemplo n.º 4
0
        public ConnectionConfigList Build(int totalConnection)
        {
            var configs = new List <bool>();

            for (var i = 0; i < totalConnection; i++)
            {
                var sendFlag = false;
                configs.Add(sendFlag);
            }

            configs.Shuffle();
            var connectionConfigList = new ConnectionConfigList();

            // foreach (var groupName in configs)
            for (int i = 0; i < configs.Count; i++)
            {
                var sendFlag = configs[i];
                connectionConfigList.Configs.Add(new ConnectionConfig {
                    GroupName = "", SendFlag = sendFlag
                });
            }

            return(connectionConfigList);
        }
Ejemplo n.º 5
0
 public override Task <Empty> LoadConnectionConfig(ConnectionConfigList connectionConfigList, ServerCallContext context)
 {
     _sigWorker.LoadConnectionConfig(connectionConfigList);
     return(Task.FromResult(new Empty()));
 }
Ejemplo n.º 6
0
        private static void HandleUpPerGroupOp(string step, ConnectionConfigBuilder connectionConfigBuilder, ConnectionConfigList connectionAllConfigList, List <string> groupNameMat)
        {
            var pattern = "upPerGroup";

            if (step.Contains(pattern))
            {
                var isNumeric = int.TryParse(step.Substring(pattern.Length), out int upNum);
                if (!isNumeric)
                {
                    throw new Exception();
                }
                connectionConfigBuilder.UpdateSendConnPerGroup(connectionAllConfigList, groupNameMat, upNum);
            }
        }
Ejemplo n.º 7
0
        private static List <bool> UpdateJoinLeavePergroupList(List <bool> joinLeavePerGroupList, ConnectionConfigList connectionAllConfigList, List <string> groupNameList, int up)
        {
            var groupSet = new HashSet <string>();

            // get all group name
            groupNameList.ForEach(groups => groups.Split(";").ToList().ForEach(groupName => groupSet.Add(groupName)));

            // get connection id list in each group
            var connectionIdListForEachGroup = new Dictionary <string, List <int> >();

            groupSet.ToList().ForEach(groupName =>
            {
                if (!connectionIdListForEachGroup.ContainsKey(groupName))
                {
                    connectionIdListForEachGroup.Add(groupName, new List <int>());
                }
            });

            // fill connectionIdListForEachGroup with connections that never join/leave group
            for (var i = 0; i < groupNameList.Count; i++)
            {
                if (!joinLeavePerGroupList[i] && !connectionAllConfigList.Configs.ToList() [i].SendFlag)
                {
                    groupNameList[i].Split(";").ToList().ForEach(groupName => connectionIdListForEachGroup[groupName].Add(i));
                }
            }

            // update joinLeavePerGroupList
            foreach (var entry in connectionIdListForEachGroup)
            {
                var connectionIdList = entry.Value;
                connectionIdList.Shuffle();
                for (var i = 0; i < up; i++)
                {
                    joinLeavePerGroupList[connectionIdList[i]] = true;
                }
            }

            return(joinLeavePerGroupList);
        }
Ejemplo n.º 8
0
 public void LoadConnectionConfig(ConnectionConfigList connectionConfigList)
 {
     _tk.ConnectionConfigList = connectionConfigList;
 }