Exemplo n.º 1
0
        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)
                );
            });
        }
Exemplo n.º 2
0
        private Task SaveActionData(role_data data, GameAction action)
        {
            var saveActionDataTask = new SaveActionDataTask()
            {
                action   = action,
                roleData = data,
            };

            return(Context.ActorOf <SaveDataActor>().Ask(saveActionDataTask));
        }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
        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);
            });
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 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);
     }
 }
Exemplo n.º 7
0
        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);
            });
        }
Exemplo n.º 8
0
        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);
            });
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
            }
        }