use of com.hsn.epic4j.core.notify.INotify in project epic4j by huisunan.
the class EpicStarter method doStart.
public void doStart(UserInfo userInfo, List<Item> weekFreeItems) {
Browser browser = null;
WatchDogThread watchDogThread = null;
try {
ThreadContext.init(epicConfig.getTimeout(), epicConfig.getInterval());
String desensitizedEmail = email(userInfo.getEmail());
log.info("账号[{}]开始工作", desensitizedEmail);
// 用户文件路径
String userDataPath = new FileUrlResource(epicConfig.getDataPath() + File.separator + userInfo.getEmail()).getFile().getAbsolutePath();
log.debug("用户数据目录:{}", userDataPath.replace(userInfo.getEmail(), desensitizedEmail));
// 获取浏览器对象
browser = iStart.getBrowser(userDataPath);
// 获取默认page
Page page = iStart.getDefaultPage(browser);
// 加载cookie
if (StrUtil.isNotBlank(epicConfig.getCookiePath()) && FileUtil.exist(epicConfig.getCookiePath())) {
log.debug("加载cookie");
List<CookieParam> cookies = JSONUtil.toBean(IoUtil.read(new FileReader(epicConfig.getCookiePath())), new TypeReference<List<CookieParam>>() {
}, false);
page.setCookie(cookies);
}
// 反爬虫设置
PageUtil.crawSet(page);
watchDogThread = new WatchDogThread(browser, Thread.currentThread(), epicConfig.getHeadLess());
watchDogThread.start();
// 打开epic主页
iStart.goToEpic(page);
List<Page> pages = browser.pages();
for (Page p : pages) {
if (!StrUtil.startWith(p.mainFrame().url(), "http")) {
p.close();
}
}
boolean needLogin = iStart.needLogin(page);
log.debug("是否需要登录:{}", needLogin ? "是" : "否");
if (needLogin) {
iLogin.login(page, userInfo.getEmail(), userInfo.getPassword());
}
// 领取游戏
List<Item> receive = iStart.receive(page, weekFreeItems);
for (INotify notify : notifies) {
if (notify.notifyReceive(receive)) {
break;
}
}
} catch (Exception e) {
if (epicConfig.getErrorScreenShoot()) {
// 输出截图和html信息
long currentTimeMillis = System.currentTimeMillis();
ScreenShootUtil.screen(browser, "data/error", currentTimeMillis + ".jpeg", currentTimeMillis + ".html");
}
log.error("程序异常", e);
} finally {
if (watchDogThread != null) {
watchDogThread.interrupt();
}
if (browser != null) {
browser.close();
}
ThreadContext.clear();
}
}
Aggregations