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); } }
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); }
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); }
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); }
public override Task <Empty> LoadConnectionConfig(ConnectionConfigList connectionConfigList, ServerCallContext context) { _sigWorker.LoadConnectionConfig(connectionConfigList); return(Task.FromResult(new Empty())); }
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); } }
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); }
public void LoadConnectionConfig(ConnectionConfigList connectionConfigList) { _tk.ConnectionConfigList = connectionConfigList; }