// 客户端请求问卷 public void OnGetQuestionnaire(Session s, IReadableBuffer data, IWriteableBuffer buff, Action end) { var QuestionnaireName = data.ReadString(); QRC.Retrieve(QuestionnaireName + s.Usr.ID, (questionnaire) => { var isNew = questionnaire == null; buff.Write(isNew); if (isNew) { var q = GetQuestionnaire(QuestionnaireName); var isExists = q != null; buff.Write(isExists); if (isExists) { q.Serialize(buff); } } end(); }); }
void OnSubmitQuestionnaireResult(Session s, IReadableBuffer data) { var qr = new QuestionnaireResult(); qr.Info.Usr = s.Usr.ID; qr.Info.Id = data.ReadString(); while (data.Available > 0) { qr.Info.Answers.Add(data.ReadString()); } qr.ID = qr.Info.Id + qr.Info.Usr; QRC.Retrieve(qr.ID, (questionnaire) => { if (questionnaire != null) { return; } QRC.AddNew(qr); }); }
// 用户登录请求 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); } }); }