public IHttpActionResult Task([FromBody] user_task taskInfo) { var task = db.userTasks.Where(t => t.user_role_id == taskInfo.user_role_id).FirstOrDefault(); var userRole = db.GetUserRoleById(taskInfo.user_role_id); if (userRole == null || userRole.user_id != user.id) { return(Json(-1, "帐号不存在")); } if (task == null) { try { task = new user_task(); task.name = userRole.username; task.create_time = DateTime.Now; task.enable = true; task.last_update_time = new DateTime(1990, 1, 1); task.user_id = user.id; task.user_role_id = taskInfo.user_role_id; task.useitem = taskInfo.useitem; task.action = taskInfo.action; task.deckid = taskInfo.deckid; task.expires_time = DateTime.Now; task.quest_ids = taskInfo.quest_ids; task.name = taskInfo.name; task.state = 0; db.userTasks.Add(task); db.SaveChanges(); } catch (Exception ex) { throw ex; } } else { task.name = userRole.username; task.user_id = user.id; task.user_role_id = taskInfo.user_role_id; task.useitem = taskInfo.useitem; task.action = taskInfo.action; task.deckid = taskInfo.deckid; task.follower_id = taskInfo.follower_id; task.quest_ids = taskInfo.quest_ids; if (task.action != "Login") { task.start_time = DateTime.Now; } db.SaveChanges(); } return(Json(0, "success")); }
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); }); }