public LoginActor() { ReceiveAsync <LoginTask>(async(task) => { device = task.device; role = task.role; data = task.data; serverApi = task.serverApi == null ? ServerApiManager.GetByRoleId(role.id) : task.serverApi; if (serverApi == null) { InitServerApi(); task.serverApi = serverApi; } if (data == null) { task.data = data = new role_data() { role_id = role.id }; } task.serverApi = serverApi; Sender.Tell ( await Context.ActorOf <MemberActor>().Ask <bool>(task) && await Context.ActorOf <ApiLoginActor>().Ask <bool>(task) && await Context.ActorOf <LoginToMemberCenterActor>().Ask <bool>(task) ); }); }
private Task SaveActionData(role_data data, GameAction action) { var saveActionDataTask = new SaveActionDataTask() { action = action, roleData = data, }; return(Context.ActorOf <SaveDataActor>().Ask(saveActionDataTask)); }
protected async Task SaveActionData(LoginTask task, GameAction action, role_data data, DateTime?expireTime = null, Dictionary <string, string> taskData = null) { var saveActionDataTask = new SaveActionDataTask() { taskId = task.id, action = action, expiresTime = expireTime, roleData = data ?? GetRoleData(task.serverApi, task.role.id, task.role.user_id), taskData = taskData == null ? task.task_data : taskData, }; await saveDataActor.Ask(saveActionDataTask); }
public LoginToMemberCenterActor() { ReceiveAsync <LoginTask>(async task => { var serverApi = task.serverApi; if (!serverApi.PlatfromInfos.ContainsKey("usk") || !serverApi.PlatfromInfos.ContainsKey("logintomembercenter")) { var loginCenter = await serverApi.LoginToMemberCenter(); if (loginCenter.code != 0) { await TaskErrorAndBack(task.id, GameAction.LOGINCENTER, loginCenter, "LoginToMemberCenter Error"); return; } var login = await serverApi.Login(); if (loginCenter.code != 0) { await TaskErrorAndBack(task.id, GameAction.LOGIN, login, "LOGIN Error"); return; } var zone = await serverApi.ApiClientNotifyZone(); if (zone.code != 0) { await TaskErrorAndBack(task.id, GameAction.API_ZONE, zone, "API_ZONE Error"); return; } var toplogin = await serverApi.Toplogin(); if (toplogin.code != 0) { await TaskErrorAndBack(task.id, GameAction.TOPLOGIN, toplogin, "TOP_LOGIN Error"); return; } serverApi.PlatfromInfos["logintomembercenter"] = "1"; var data = new role_data() { role_id = task.data.role_id, id = task.data.id, usk = serverApi.PlatfromInfos["usk"], rguid = serverApi.PlatfromInfos["rguid"], game_user_id = serverApi.PlatfromInfos["userId"] }; Context.ActorOf <SaveRoleDataActor>().Tell(data); } Sender.Tell(true); }); }
protected role_data GetRoleData(ServerApi serverApi, int roleId, int userId = 0, role_data ndata = null) { var data = new role_data() { role_id = roleId }; data.usk = serverApi.PlatfromInfos.ContainsKey("usk") ? serverApi.PlatfromInfos["usk"] : null; data.rguid = serverApi.PlatfromInfos["rguid"]; data.game_user_id = serverApi.PlatfromInfos["userId"]; data.access_token = serverApi.PlatfromInfos["access_token"]; data.access_token_expires = long.Parse(serverApi.PlatfromInfos["expires"]); data.bilibili_id = serverApi.PlatfromInfos["uid"]; if (serverApi.PlatfromInfos.ContainsKey("cookie")) { data.cookie = serverApi.PlatfromInfos["cookie"]; } if (ndata.quest_info != null) { data.quest_info = ndata.quest_info; } if (ndata.deck_info != null) { data.deck_info = ndata.deck_info; } if (ndata.svt_info != null) { data.svt_info = ndata.svt_info; } if (ndata.user_game != null) { data.user_game = ndata.user_game; } if (ndata.user_item != null) { data.user_item = ndata.user_item; } if (ndata.cookie != null) { data.cookie = ndata.cookie; } if (ndata.battle_id != null) { data.battle_id = ndata.battle_id; } return(data); }
protected role_data getRoleData(int roleId) { using (var db = new Db()) { var roleData = db.GetRoleDataByRoleId(roleId); if (roleData == null) { roleData = new role_data() { role_id = roleId, last_login = DateTime.Now }; if (roleData.role_id != 0) { db.roleData.Add(roleData); db.SaveChanges(); } } return(roleData); } }
public LoginTaskActor() { ReceiveAsync <LoginTask>(async(task) => { Log(task.id, GameAction.LOGIN, "准备登陆"); var device = task.device; var role = task.role; var data = task.roleData; if (task.serverApi == null) { task.serverApi = InitServerApi(task); } var serverApi = task.serverApi; if (data == null) { task.roleData = data = new role_data() { role_id = role.id }; } task.serverApi = serverApi; if ( await Context.ActorOf <MemberActor>().Ask <bool>(task) && await Context.ActorOf <ApiLoginActor>().Ask <bool>(task) && await Context.ActorOf <LoginToMemberCenterActor>().Ask <bool>(task) && await Context.ActorOf <HomeActor>().Ask <bool>(task) ) { Sender.Tell(true); } Sender.Tell(false); }); }
public TaskExcuteActor() { ReceiveAsync <int>(async taskId => { //await Context.ActorOf<UpdateVersionActor>().Ask(string.Empty); Log(taskId, GameAction.START_TASK, "正在准备执行任务"); using (var db = new Db()) task = db.GetTaskById(taskId); if (task == null) { await TaskError(taskId, GameAction.START_TASK, null, "TASK NOT EXISTS \r\n" + "ID: " + taskId); return; } if (task.enable == false) { Log(taskId, GameAction.START_TASK, "任务被禁用,请编辑任务后启动"); await TaskError(taskId, GameAction.START_TASK, null, "TASK NOT ENABLED \r\n" + "ID: " + taskId); return; } if (task.end_time != null && task.end_time.Value < DateTime.Now) { Log(taskId, GameAction.START_TASK, "任务已经到期"); await TaskError(taskId, GameAction.START_TASK, null, "TASK IS END!\r\n" + "ID: " + taskId); return; } if (task.state == (int)TaskState.RUNNING && task.expires_time > DateTime.Now) { Log(taskId, GameAction.START_TASK, "检查到任务正在进行中,等待结果"); await TaskError(taskId, GameAction.START_TASK, null, "TASK IS RUNNING!\r\n" + "ID: " + taskId); return; } using (var db = new Db()) role = db.GetUserRoleById(task.user_role_id); if (role == null) { Log(taskId, GameAction.START_TASK, "执行帐号不存在,任务无法执行"); await TaskError(taskId, GameAction.START_TASK, null, "ROLE NOT EXISTS \r\n" + "ID: " + taskId + ", ROLE_ID: " + task.user_role_id); return; } using (var db = new Db()) device = db.GetDeviceById(role.device_id); if (device == null) { Log(taskId, GameAction.START_TASK, "执行帐号设备信息不存在,任务无法执行"); await TaskError(taskId, GameAction.START_TASK, null, "DEVICE NOT EXISTS!\r\n" + "ID: " + taskId + ", ROLE_ID: " + task.user_role_id + ",DEVICE_ID: " + role.device_id); return; } if (task.state != 0 && task.expires_time < DateTime.Now) { excuteType = ExcuteType.Expires; } else if (task.state == (int)TaskState.NET_ERROR || task.state == (int)TaskState.GAME_ERROR) { excuteType = ExcuteType.ErrorReStart; } if (excuteType == ExcuteType.Expires) { Log(taskId, GameAction.START_TASK, "检测任务执行超时,恢复任务中"); } else if (excuteType == ExcuteType.ErrorReStart) { Log(taskId, GameAction.START_TASK, "检测任务执行失败,恢复任务中"); } using (var db = new Db()) { roleData = db.GetRoleDataByRoleId(role.id); if (roleData == null) { roleData = new role_data() { role_id = role.id, last_login = new DateTime(1990, 1, 1) }; db.Add(roleData); } var taskDataList = db.GetTaskDataByTaskId(task.id); var dataDic = new Dictionary <string, string>(); foreach (var item in taskDataList) { dataDic[item.name] = item.value; } taskDatas = dataDic; db.Database.ExecuteSqlCommand("update user_task set state=@p0 where id=@p1", (int)TaskState.RUNNING, taskId); } if (task.current_action == 1024) { task.current_action = 0; } switch (task.action) { case "Login": await ExcuteLoginTask(); break; case "Battle": await ExcuteBattleTask(); break; default: Log(task.id, GameAction.START_TASK, "未知的计划类型,禁用该计划"); using (var db = new Db()) db.Database.ExecuteSqlCommand("update user_task set state=0,enable=0,current_action=0 where id=@p1", taskId); await TaskError(taskId, GameAction.START_TASK, null, "ID: " + taskId + " UNKNOWN ACTION!"); return; } Sender.Tell(true); }); }
protected ServerApi InitServerApi(user_role role, device device, role_data data) { var serverApi = new ServerApi(device.platform_type == 1); serverApi.PlatfromInfos["version"] = AppInfo.version; serverApi.PlatfromInfos["dataVer"] = AppInfo.dataVer; serverApi.PlatfromInfos["dateVer"] = AppInfo.dateVer; serverApi.PlatfromInfos["appVer"] = AppInfo.appVer; serverApi.PlatfromInfos["ver"] = AppInfo.appVer; serverApi.PlatfromInfos["deviceid"] = device.deviceid; serverApi.PlatfromInfos["dp"] = device.dp; serverApi.PlatfromInfos["idfa"] = device.idfa; serverApi.PlatfromInfos["model"] = device.model; serverApi.PlatfromInfos["os"] = device.os; serverApi.PlatfromInfos["pf_ver"] = device.pf_ver; serverApi.PlatfromInfos["platform_type"] = device.platform_type.ToString(); serverApi.PlatfromInfos["ptype"] = device.ptype; serverApi.PlatfromInfos["udid"] = device.udid; if (data != null) { serverApi.PlatfromInfos["cookie"] = data.cookie; if (!string.IsNullOrEmpty(data.access_token)) { serverApi.PlatfromInfos["access_token"] = data.access_token; serverApi.PlatfromInfos["access_key"] = data.access_token; serverApi.PlatfromInfos["expires"] = data.access_token_expires.ToString(); } if (!string.IsNullOrEmpty(data.usk)) { serverApi.PlatfromInfos["usk"] = data.usk; serverApi.PlatfromInfos["rgusk"] = data.usk; } if (!string.IsNullOrEmpty(data.rguid)) { serverApi.PlatfromInfos["rguid"] = data.rguid; } if (!string.IsNullOrEmpty(data.game_user_id)) { serverApi.PlatfromInfos["rguid"] = data.rguid; serverApi.PlatfromInfos["_userId"] = data.game_user_id; serverApi.PlatfromInfos["userId"] = data.game_user_id; serverApi.PlatfromInfos["role_id"] = data.game_user_id; } if (!string.IsNullOrEmpty(data.nickname)) { serverApi.PlatfromInfos["nickname"] = data.nickname; serverApi.PlatfromInfos["uname"] = data.nickname; } if (!string.IsNullOrEmpty(data.bilibili_id)) { serverApi.PlatfromInfos["uid"] = data.bilibili_id; } if (data.quest_info != null) { serverApi.userQuest = JsonConvert.DeserializeObject <List <HomeUserquest> >(data.quest_info); } if (data.svt_info != null) { serverApi.userSvt = JsonConvert.DeserializeObject <List <ToploginUsersvt> >(data.svt_info); } if (data.deck_info != null) { serverApi.userDeck = JsonConvert.DeserializeObject <List <ToploginUserdeck> >(data.deck_info); } if (data.user_game != null) { serverApi.userGame = JsonConvert.DeserializeObject <HomeUsergame>(data.user_game); } } return(serverApi); }
public async Task Home(ServerApi serverApi, role_data data, user_role role) { logger.Info("登陆首页领取礼物"); try { var home = await serverApi.Home(); if (home.cache != null && home.cache.replaced != null && home.cache.replaced.userQuest != null) { data.quest_info = JsonConvert.SerializeObject(home.cache.replaced.userQuest); } if (home.cache != null && home.cache.replaced != null && home.cache.replaced.userSvt != null) { data.svt_info = JsonConvert.SerializeObject(home.cache.replaced.userSvt); } if (home.cache != null && home.cache.replaced != null && home.cache.replaced.userGame != null) { data.user_game = JsonConvert.SerializeObject(home.cache.replaced.userGame[0]); } //检查章节完成情况 if (!string.IsNullOrEmpty(data.quest_info) && !role.chaptered && role.id != 0) { logger.Info(role.username + " 检查章节完成情况"); var questChecker = new QuestChecker() { TimetampSecond = serverApi.TimetampSecond, userQuest = JsonConvert.DeserializeObject <List <HomeUserquest> >(data.quest_info) }; var hasQuest = false; var questList = questChecker.GetUserQuestList(); foreach (var quest in questList) { if (quest.type != "1") { continue; } var spot = AssetManage.Database.mstSpot.FirstOrDefault(s => s.id == quest.spotId); if (spot == null) { continue; } var war = AssetManage.Database.mstWar.FirstOrDefault(w => w.id == spot.warId && w.status == "0"); if (war == null) { continue; } hasQuest = true; break; } if (!hasQuest) { await Context.ActorOf <RoleChapteredActor>().Ask <bool>(role.id); logger.Info(role.username + " 章节清除完成"); } } var list = await serverApi.Presentlist(); var receiveRes = await serverApi.Presentreceive(list.cache.replaced.userPresentBox.Select(b => b.presentId).ToArray()); if (receiveRes.cache != null && receiveRes.cache.updated != null && receiveRes.cache.updated.userGame != null) { data.user_game = JsonConvert.SerializeObject(receiveRes.cache.updated.userGame[0]); } data.usk = serverApi.PlatfromInfos.ContainsKey("usk") ? serverApi.PlatfromInfos["usk"] : null; data.rguid = serverApi.PlatfromInfos["rguid"]; data.game_user_id = serverApi.PlatfromInfos["userId"]; data.access_token = serverApi.PlatfromInfos["access_token"]; data.access_token_expires = long.Parse(serverApi.PlatfromInfos["expires"]); data.bilibili_id = serverApi.PlatfromInfos["uid"]; await SaveActionData(data, GameAction.HOME); logger.Info("id:" + data.role_id + " name:" + home.cache.replaced.userGame[0].name + " stone:" + home.cache.replaced.userGame[0].stone); } catch (Exception ex) { logger.Error(ex); } }