using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Sog; using ProtoCSStruct; using Sog.IO; namespace Game { /// /// AB测试香港 /// public static class ABTestSvc { public static int MakeABTestFlag(long uid, int realmId, string os, string ip,string deviceId) { ABTestConfig[] abTestConfigs = GameServerUtils.GetServerConfig().abTestConfigs; if(abTestConfigs == null || abTestConfigs.Length == 0) { return 0; } int flag = 0; foreach(var config in abTestConfigs) { if(config.abTestFlag <= 0) { continue; } //ip白名单判断 if (config.enableWhiteIPList == 1 && !LimitIPList.IsInWhiteList(ip, deviceId)) { continue; } //realm白名单判断 if(!string.IsNullOrEmpty(config.os)) { if(string.IsNullOrEmpty(os)) { continue; } string lowCase = os.ToLower(); if(lowCase != config.os) { continue; } } //realmId白名单 if(config.openOnRealmIds != null && config.openOnRealmIds.Length > 0) { bool validRealmId = false; foreach(var id in config.openOnRealmIds) { if(id == realmId) { validRealmId = true; break; } } if(validRealmId == false) { continue; } } // int uidRemainder = (int)(uid % 10); if(uidRemainder < config.uidRemainderStart || uidRemainder > config.uidRemainderEnd) { continue; } //按位,可以配置多个规则 flag |= config.abTestFlag; TraceLog.Trace("ABTestSvc.MakeABTestFlag uid {0} realmId {1} os {2} ip {3} match abTestFlag {4} flag {5}", uid, realmId, os, ip, config.abTestFlag, flag); } return flag; } } }