From d656d12a74729cac6cea73e1a934cd74c4fd75f9 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 4 Aug 2022 13:38:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ip=E5=BD=92=E5=B1=9E=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/connector/handler/entryHandler.ts | 3 +++ game-server/app/services/roleService.ts | 13 +++++++++++++ game-server/package-lock.json | 5 +++++ game-server/package.json | 1 + shared/consts/constModules/selectConst.ts | 2 +- shared/db/Role.ts | 7 +++++++ shared/domain/battleField/guild.ts | 2 ++ shared/domain/roleField/friend.ts | 2 ++ web-server/app/service/Auth.ts | 2 +- 9 files changed, 35 insertions(+), 2 deletions(-) diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 09ccac665..9dd3f36ee 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -21,6 +21,7 @@ import { getExpByLv } from '../../../pubUtils/data'; import { reportCreateRoleEventToTa, reportTAEvent, reportTAUserSet } from '../../../services/sdkService'; import { saveLoginAndOutLog } from '../../../pubUtils/logUtil'; import { sendMessageToAllWithSuc } from '../../../services/pushService'; +import { setIpLocation } from '../../../services/roleService'; export default function (app: Application) { new HandlerService(app, {}); @@ -63,6 +64,8 @@ export class EntryHandler { return resResult(STATUS.ROLE_NOT_FOUND); } + setIpLocation(role.roleId, this.getIp(session)); + let serverName = this.app.getServerId(); await roleLogin(role.roleId, user.userCode, serverName, role.createTime, role.serverId, role.lv, role.topLineupCe); // 保存在线用户 await this.addSession(user, role, session); diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index e60c9efa5..880e106af 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -13,6 +13,9 @@ import { Figure } from '../domain/dbGeneral'; import { pick } from 'underscore'; import { Reward } from '../domain/battleField/pvp'; import { CheckMeterial } from './role/checkMaterial'; +import IP2Region from "ip2region"; +const query = new IP2Region({ disableIpv6: true }); + export async function getTeraphStrengthenResult(role: RoleType, count: number, dicTeraph: DicTeraph, teraph: Teraph) { let criAttr: number[] = [], times = 0; @@ -288,4 +291,14 @@ export async function getSchoolPoint(roleId: string) { } return pre; }, 0); +} + +export async function setIpLocation(roleId: string, ip: string) { + try { + const res = query.search(ip); + console.log('##### setIpLocation', res) + await RoleModel.updateRoleInfo(roleId, { ip, ipLocation: res.province||res.country }) + } catch(e) { + console.error('setIpLocation', e) + } } \ No newline at end of file diff --git a/game-server/package-lock.json b/game-server/package-lock.json index 283e30fcb..7ed63dad1 100644 --- a/game-server/package-lock.json +++ b/game-server/package-lock.json @@ -1620,6 +1620,11 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, + "ip2region": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ip2region/-/ip2region-2.3.0.tgz", + "integrity": "sha512-zV5Xsadzrx9Ej6heoyhbXMsfGWWQ3C6bAIYStrHhw9kzLpGpVNlnAyRBxxPgxA1GNqr1Ti7oUxcWsMWNN3jZBg==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", diff --git a/game-server/package.json b/game-server/package.json index 89ca5dff2..8817e8d42 100644 --- a/game-server/package.json +++ b/game-server/package.json @@ -35,6 +35,7 @@ "crc": "^3.5.0", "cross-env": "^7.0.3", "csprng": "^0.1.2", + "ip2region": "^2.3.0", "koa-is-json": "^1.0.0", "local": "^0.3.3", "moment": "^2.29.1", diff --git a/shared/consts/constModules/selectConst.ts b/shared/consts/constModules/selectConst.ts index af6b6547c..331e2e857 100644 --- a/shared/consts/constModules/selectConst.ts +++ b/shared/consts/constModules/selectConst.ts @@ -57,7 +57,7 @@ export enum FRIEND_SHIP_SELECT { GET_FRIEND_VALUE = 'friendValue friendLv' } -export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName', 'isVip', 'createTime']; +export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName', 'isVip', 'createTime', 'ipLocation']; export enum SURVEY_SELECT { FIND = '-__v -_id -surveyName -roleIndex -reward -mailContent -receivedRole -createdAt -updatedAt' diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 77f1e5efe..86236a9b3 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -327,6 +327,13 @@ export default class Role extends BaseModel { @prop({ required: false }) shushuMark: string; // 数数distinctId + // 最后登录 IP + @prop({ required: false }) + ip: string; + + @prop({ required: false }) + ipLocation: string; + public static async findAllByUid(uid: number, getters = false, virtuals = true) { const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt').lean({ getters, virtuals }); return role; diff --git a/shared/domain/battleField/guild.ts b/shared/domain/battleField/guild.ts index 4c26f35df..87c2569d0 100644 --- a/shared/domain/battleField/guild.ts +++ b/shared/domain/battleField/guild.ts @@ -88,6 +88,7 @@ export class PlayerDetail { roleName: string; lv: number; title?: number = 1; + ipLocation: string = ''; head?: number = EXTERIOR.EXTERIOR_FACE; frame?: number = EXTERIOR.EXTERIOR_FACECASE; spine?: number = EXTERIOR.EXTERIOR_APPEARANCE; @@ -126,6 +127,7 @@ export class PlayerDetail { if(role.head) this.head = role.head; if(role.frame) this.frame = role.frame; if(role.spine) this.spine = role.spine; + if(role.ipLocation) this.ipLocation = role.ipLocation; } setCe(ce: number) { diff --git a/shared/domain/roleField/friend.ts b/shared/domain/roleField/friend.ts index a4237cd54..a6f0428ec 100644 --- a/shared/domain/roleField/friend.ts +++ b/shared/domain/roleField/friend.ts @@ -18,6 +18,7 @@ export class FriendParams { serverName: string; type: number = FRIEND_RELATION_TYPE.NORMAL; guildName: string = ''; + ipLocation: string = ''; constructor(role: RoleType) { this.roleId = role.roleId; @@ -29,6 +30,7 @@ export class FriendParams { this.ce = role.ce; this.title = role.title; this.guildName = role.guildName||''; + this.ipLocation = role.ipLocation||''; } setServerName(serverId: number, serverName: string) { diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index 672c9f75e..f790ace2c 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -331,7 +331,7 @@ export default class Auth extends Service { const code = ctx.service.utils.genCode(6); const seqId = await Counter.getNewCounter(COUNTER.ROLE) || -1; - const role = await RoleModel.createRole(uid, serverId, { roleId, code, roleName: "默认玩家名", seqId, lv: DEFAULT_LV, exp: (getExpByLv(DEFAULT_LV - 1) || { sum: 0 }).sum || 0 }, distinctId); + const role = await RoleModel.createRole(uid, serverId, { roleId, code, roleName: "默认玩家名", seqId, lv: DEFAULT_LV, exp: (getExpByLv(DEFAULT_LV - 1) || { sum: 0 }).sum || 0, ip: ctx.clientIp }, distinctId); if (role) { await ServerlistModel.incRoleCnt(serverId); if(server.isReview) { // 审核服跳关卡