public bool AddUser(User user) { if (_memberMap.Count >= _nMatchingCount) { return false; } MatchMember mem; if (_memberMap.TryGetValue(user.RoleID,out mem)) { return false; } mem = new MatchMember(); mem.Create(user, this, _memberMap.Count); _memberMap.Add(user.RoleID, mem); return true; }
public async Task <IActionResult> ReplayInfoSave([FromBody] ReplayInfoSave.Request req) { // parse BattleServer-Package-version int[] pver = req.packageVersion.Split('.').Select(a => int.Parse(a)).ToArray(); if (pver.Length < 4) { return(BuildErrorResponse(Error.LowCode.BadParameter)); } UInt64 packageVersion = VersionChecker.Valued(VersionChecker.ReferenceSrc.PackageVersion, pver); //Console.WriteLine("ReplayInfoSave:packageVersion={0}", packageVersion); // parse BattleServer-MasterData-version int[] mver = req.masterDataVersion.Split('-').Select(a => int.Parse(a)).ToArray(); if (mver.Length < 3) { return(BuildErrorResponse(Error.LowCode.BadParameter)); } UInt64 masterDataVersion = VersionChecker.Valued(VersionChecker.ReferenceSrc.MasterDataVersion, mver); //Console.WriteLine("ReplayInfoSave:masterDataVersion={0}", masterDataVersion); var info = new ReplayInfoAllMatch(); info.packageVersion = packageVersion; info.masterDataVersion = masterDataVersion; info.date = req.baseInfo.date; info.matchId = req.baseInfo.matchId; info.matchType = req.baseInfo.matchType; info.mapId = req.baseInfo.mapId; info.gameMode = req.baseInfo.gameMode; info.totalTime = req.baseInfo.totalTime; info.result = req.baseInfo.result; info.mvpUserName = req.baseInfo.mvpPlayer; info.mvpUnitId = req.baseInfo.mvpUnit; await Common3DB.ReplayInfoAllMatch.AddAsync(info); // ランクマッチテーブル登録 if (req.saveRank) { var rank = new ReplayInfoRankMatch(); rank.packageVersion = packageVersion; rank.masterDataVersion = masterDataVersion; rank.date = req.baseInfo.date; rank.matchId = req.baseInfo.matchId; rank.mapId = req.baseInfo.mapId; rank.gameMode = req.baseInfo.gameMode; rank.mvpUnitId = req.baseInfo.mvpUnit; rank.ratingAverage = req.rateAverage; rank.isFeatured = req.isFeatured; // 使われた機体をbitで管理 UInt64 spawn = 0; foreach (int bit_idx in req.spawnUnits) { UInt64 mask = (UInt64)(1 << bit_idx); spawn |= mask; } // 表彰機体をbitで管理 UInt64 award = 0; foreach (int bit_idx in req.awardUnits) { UInt64 mask = (UInt64)(1 << bit_idx); award |= mask; } //Console.WriteLine("spawn = {0}", spawn); //Console.WriteLine("award = {0}", award); rank.spawnUnits = spawn; rank.awardUnits = award; await Common3DB.ReplayInfoRankMatch.AddAsync(rank); } // フィーチャードマッチ用データ登録 if (req.isFeatured) { var member = new MatchMember(); member.matchId = req.baseInfo.matchId; member.playersInfo = req.members; await Common3DB.MatchMember.AddAsync(member); } // 更新適用 await Common3DB.SaveChangesAsync(); // ユーザ毎の保存 foreach (var userresult in req.playerResult) { var personalDb = PDBSM.PersonalDBContext(userresult.playerId); var userdata = new ReplayUserHistory(); userdata.playerId = userresult.playerId; userdata.resultType = userresult.result; userdata.packageVersion = packageVersion; userdata.masterDataVersion = masterDataVersion; userdata.date = req.baseInfo.date; userdata.matchId = req.baseInfo.matchId; userdata.matchType = req.baseInfo.matchType; await personalDb.ReplayUserHistory.AddAsync(userdata); await personalDb.SaveChangesAsync(); } var res = new ReplayInfoSave.Response(); return(Ok(res)); }
public bool BreakMatchbyMember(MatchMember matchMember) { if (matchMember == null || matchMember._user == null) { return false; } matchMember.ExitMatch(); return true; }
private bool SendMatchResInfo(MatchMember member,int nOrder) { User user = member._user; if (user == null) { return false; } RoleData roleData = user.GetCurRoleData(); if (roleData == null) { return false; } MatchResultInfo resInfo = new MatchResultInfo(); resInfo.lnRoleID = roleData.lnRoleID; resInfo.szRoleName = roleData.szName; resInfo.nMatchOrder = nOrder; resInfo.nMatchTime = member._nCompleteTime; resInfo.nGold = roleData.nGold; resInfo.lnExp = roleData.lnExp; resInfo.nLevel = roleData.nLevel; object[] pars = { resInfo }; SendMsgToAllUser(new APIMessage { Type = (int)enMessageType.EMT_SC_MatchResultInfo, Parameters = pars }); return true; }
public bool SetReadFinishMember(MatchMember matchMember) { matchMember._bIsReady = true; bool bAllReady = true; foreach (var mem in _memberMap) { if (!mem.Value._bIsReady) { bAllReady = false; break; } } if (bAllReady) { object[] pars = { }; SendMsgToAllUser(new APIMessage { Type = (int)enMessageType.EMT_SC_StartGame, Parameters = pars }); } return true; }
public void DelMember(MatchMember matchMember) { if (matchMember == null || matchMember._user == null) { return; } User user = matchMember._user; MatchMember mem; if (!_memberMap.TryGetValue(user.RoleID, out mem)) { return; } _memberMap.Remove(user.RoleID); if (_memberMap.Count <= 0) { _MatchMgr.StopMatch(this); } }
public bool CompleteMatchByMember(MatchMember matchMember) { if (matchMember == null || matchMember._user == null) { return false; } if (_nStartMatchTime <= 0) { return false; } matchMember._nCompleteTime = (int)(DelayEvent.GetCurUtcMSTime() - _nStartMatchTime); _CompleteMemberList.Add(matchMember); if (_CompleteMemberList.Count == 1) { int nCountdownTime = 10000; _CompleteTimeout = new MyTimeOut(nCountdownTime); object[] pars = { nCountdownTime }; APIMessage message = new APIMessage { Type = (int)enMessageType.EMT_SC_CompleteStartCountdown, Parameters = pars }; SendMsgToAllUser(message); } if (_CompleteMemberList.Count == _memberMap.Count) { CompleteMatch(true); } return true; }