// 推动游戏进度 public void OnTimeElapsed(int te) { // 推动所有房间的游戏逻辑, 并记录已经结束的房间 var roomsFinished = new List <Room4Server>(); foreach (var r in rooms) { if (!r.Finished) { var winner = r.CheckWinner(); if (winner >= 0) // 0 是平局 { r.BattleEnd(r.UsrsID[winner]); } } if (r.Finished) { roomsFinished.Add(r); BattleLogger.Log(new BattleInfo(r.UsrsID[1], r.UsrsID[2], r.UsrsInfo[1].Name, r.UsrsInfo[2].Name, r.FrameNo, r.Winner == r.UsrsID[1] ? 1 : (r.Winner == r.UsrsID[2] ? 2 : 0), r.IsPVP)); } else { r.OnTimeElapsed(te); } } // 丢弃已结束的房间 foreach (var r in roomsFinished) { foreach (var usr in r.UsrsID) { if (usr != null) { usr2room.Remove(usr); } rooms.Remove(r); } } }
// 用户登录请求 void OnUserLoginMsg(Connection conn, IReadableBuffer data, IWriteableBuffer buff, Action end) { var uid = data.ReadString(); var deviceModel = ""; // 检查版本 var isNewVersion = false; var version = ""; var buildNo = ""; var platform = ""; if (data.Available != 0) { version = data.ReadString(); platform = data.ReadString(); } if (data.Available != 0) { deviceModel = data.ReadString(); buildNo = data.ReadString(); } isNewVersion = (version == SrvVersion) && (buildNo == SrvBuildNo); buff.Write(isNewVersion); if (!isNewVersion) { if (platform == "IOS") { buff.Write("https://www.apple.com"); } else if (platform == "ANDROID") { buff.Write("https://www.google.com"); } else { buff.Write("https://www.baidu.com"); } end(); return; } UC.Retrieve(uid, (usr) => { if (SC[uid] != null) { KickOut(uid); end(); return; } var isNew = usr == null; if (isNew) // 用户不存在就创建新的 { usr = new User(); usr.ID = uid; usr.Info = new UserInfo(); usr.Info.DeviceModel = deviceModel; UC.AddNew(usr); UserManager.SetDefaultInfo(usr); } // 创建会话 var s = new Session(); s.Usr = usr; s.Conn = conn; SC[uid] = s; // 登录日志 SrvLogger.Log(new LoginInfo(uid, usr.Info.Name, conn.GetIP(), isNew)); BeforeUserLogin.SC(s, isNew); // 通知登录成功 buff.Write(true); buff.Write(usr.Info); // 问卷调查 var totalCount = usr.Info.WinCount + usr.Info.LoseCount; if (totalCount >= 1 && totalCount < 5) { buff.Write("1"); end(); OnUserLogin.SC(s, isNew); } else if (totalCount >= 5) { QRC.Retrieve("1" + s.Usr.ID, (questionnaire) => { if (questionnaire == null) { buff.Write("1"); end(); OnUserLogin.SC(s, isNew); } else { buff.Write("2"); end(); OnUserLogin.SC(s, isNew); } }); } else { buff.Write("0"); end(); OnUserLogin.SC(s, isNew); } }); }