zhanwencai преди 1 година
родител
ревизия
dff274c999

+ 33 - 0
webServer/package-lock.json

@@ -781,6 +781,14 @@
       "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
       "dev": true
     },
+    "cron-parser": {
+      "version": "4.9.0",
+      "resolved": "https://registry.npmmirror.com/cron-parser/-/cron-parser-4.9.0.tgz",
+      "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
+      "requires": {
+        "luxon": "^3.2.1"
+      }
+    },
     "cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1598,11 +1606,21 @@
       "resolved": "https://registry.npmmirror.com/long/-/long-5.2.3.tgz",
       "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
     },
+    "long-timeout": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/long-timeout/-/long-timeout-0.1.1.tgz",
+      "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w=="
+    },
     "lru-cache": {
       "version": "8.0.5",
       "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-8.0.5.tgz",
       "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA=="
     },
+    "luxon": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmmirror.com/luxon/-/luxon-3.5.0.tgz",
+      "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ=="
+    },
     "make-error": {
       "version": "1.3.6",
       "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz",
@@ -1795,6 +1813,16 @@
       "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
       "dev": true
     },
+    "node-schedule": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/node-schedule/-/node-schedule-2.1.1.tgz",
+      "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==",
+      "requires": {
+        "cron-parser": "^4.2.0",
+        "long-timeout": "0.1.1",
+        "sorted-array-functions": "^1.3.0"
+      }
+    },
     "normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -2180,6 +2208,11 @@
         "is-arrayish": "^0.3.1"
       }
     },
+    "sorted-array-functions": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz",
+      "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA=="
+    },
     "source-map": {
       "version": "0.7.4",
       "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",

+ 1 - 0
webServer/package.json

@@ -22,6 +22,7 @@
     "moment-timezone": "^0.5.45",
     "mysql": "^2.18.1",
     "mysql2": "^3.11.0",
+    "node-schedule": "^2.1.1",
     "redis": "^4.7.0",
     "typescript": "^5.5.4",
     "utf-8-validate": "^6.0.3",

+ 1 - 0
webServer/src/config/sdk.sql

@@ -50,6 +50,7 @@ CREATE TABLE `game_enter_server` (
 
 ALTER TABLE game_server ADD white_list varchar(1000) NOT NULL DEFAULT '';
 
+ALTER TABLE game_server ADD open_time int(11) NOT NULL DEFAULT 0 COMMENT '开区时间';
 
 //加区服
  INSERT INTO `game_server` (`id`, `name`, `status`, `ip`, `port`, `tag`, `tips`,`white_list`) VALUES (6, '寻宝6区', 0, '118.145.139.78', 8196, 'default', '服务器将于2024-09-10 10:00开启 官方QQ群:992058780','');

+ 9 - 9
webServer/src/controller/ApiController.ts

@@ -673,7 +673,7 @@ class ApiController {
         if (servers.length > 0) {
             servers.forEach(function (element) {
                 let status = element.status
-                if (status == 0 && element.white_list) {
+                if ((status == 0 || status == 3) && element.white_list) {
                     const list = element.white_list.split(",");
 
                     if (list.length > 0) {
@@ -703,7 +703,7 @@ class ApiController {
             ip = ip.substring('::ffff:'.length);
         }
         logger.info("getAllServerList 区服接口", { "ip": ctx.request.ip })
-        const servers = (await Server.getAllServerList(tag,ip))
+        const servers = (await Server.getAllServerList(tag, ip))
         ctx.body = servers
     }
 
@@ -785,7 +785,7 @@ class ApiController {
             });
 
         } else {
-            const servers = (await Server.getServerList(tag,1))
+            const servers = (await Server.getServerList(tag, 1))
             const serverInfo = servers[servers.length - 1]
             data.push({
                 "channel": "Thailand", //渠道固定
@@ -950,13 +950,13 @@ class ApiController {
             return
         }
         let param = JSON.stringify({
-            type:"sendMail",
+            type: "sendMail",
             mail: JSON.stringify({
-                uuid:data.uuid,
-                title:data.title,
-                content:data.content,
-                items:JSON.parse(data.items),
-                expire:data.expire
+                uuid: data.uuid,
+                title: data.title,
+                content: data.content,
+                items: JSON.parse(data.items),
+                expire: data.expire
             })
         })
         // Msg.connect(url, Account);

+ 1 - 1
webServer/src/json/notice.json

@@ -1,6 +1,6 @@
 [
     {
-        "content": "《寻宝之旅》是一款水墨风格的卡牌游戏,突破了传统的框架,游戏中拥有丰富的支线章节,玩家的每一个决策都会对游戏的故事发展产生深远影响,真正实现了高度互动的剧情体验。\n新服【S6】服【9月10日10:00】开启!!\n【礼包码】\n通用礼包:进入游戏直接输入xbzl555、xbzl666、xbzl777\nQQ群礼包:3个礼包。群内不定时会发放礼包。\n社区礼包3个:在tap社区直接领取。\ntaptap签到礼包:总共7个礼包,需要前往taptap签到才能获得。\n领取方式:左上角【人物头像】→【设置】→【礼包码兑换】\n官方QQ交流群:992058780 \n",
+        "content": "《寻宝之旅》是一款水墨风格的卡牌游戏,突破了传统的框架,游戏中拥有丰富的支线章节,玩家的每一个决策都会对游戏的故事发展产生深远影响,真正实现了高度互动的剧情体验。\n新服【S6】服【9月10日00:00】开启!!\n【礼包码】\n通用礼包:进入游戏直接输入xbzl555、xbzl666、xbzl777\nQQ群礼包:3个礼包。群内不定时会发放礼包。\n社区礼包3个:在tap社区直接领取。\ntaptap签到礼包:总共7个礼包,需要前往taptap签到才能获得。\n领取方式:左上角【人物头像】→【设置】→【礼包码兑换】\n官方QQ交流群:992058780 \n",
         "status": 1
     }
 ]

+ 4 - 4
webServer/src/model/ServerModel.ts

@@ -3,9 +3,9 @@ import { query } from '../sql/query'; // 确保路径是正确的
 class ServerModel {
     //获取
     async getServerList(tag: any, status: number) {
-        if(status){
-            return await query(`SELECT id,status,name,ip,port,tips,white_list FROM game_server WHERE tag = ? and status =  ?`, [tag,status])
-        }else{
+        if (status) {
+            return await query(`SELECT id,status,name,ip,port,tips,white_list FROM game_server WHERE tag = ? and status =  ?`, [tag, status])
+        } else {
             return await query(`SELECT id,status,name,ip,port,tips,white_list FROM game_server WHERE tag = ?`, [tag])
         }
     }
@@ -16,7 +16,7 @@ class ServerModel {
         const rows = await query(`SELECT id,status,name,ip,port,tips,white_list FROM game_server WHERE tag = ?`, [tag])
         const resultArray = (rows as any[]).map(row => {
             let status = row.status
-            if (status == 0 && row.white_list) {
+            if ((status == 0 || status == 3) && row.white_list) {
                 const list = row.white_list.split(",");
                 if (list.length > 0) {
                     if (list.includes(ip)) {

+ 3 - 0
webServer/src/server.ts

@@ -3,6 +3,7 @@ const Koa = require('koa')
 const bodyParser = require('koa-bodyparser');
 const router = require('./router/index')
 const koaRedis = require('koa-redis');
+import Task from './utils/task'
 import {
     redisConfig,
 } from './config/dbConfig'
@@ -27,4 +28,6 @@ app.use(router.routes()); //路由
 //监听端口
 const port = 3000
 app.listen(port);
+const appTask = new Task();
+appTask.openServer()
 console.log(`启动成功,服务端口为:${port}`)

+ 26 - 0
webServer/src/utils/task.ts

@@ -0,0 +1,26 @@
+
+import { query } from '../sql/query'; // 确保路径是正确的
+const schedule = require('node-schedule');
+
+export default class Task {
+    openServer() {
+        const rule = new schedule.RecurrenceRule();
+        rule.second = [0];
+        const sql = 'SELECT * FROM game_server where status = 0 and open_time > 0';
+        query(sql, (error, results, fields) => {
+            if (error) throw error;
+            // 处理查询结果
+            console.log(results);
+            (results as any[]).forEach(row => {
+                const timestamp = new Date().getTime();
+                if (timestamp >= row.open_time) {
+                    const updateSql = `update  game_server set status = 1 where id = ${row.id} `;
+                    query(updateSql, (error, res, fields) => {
+                        console.log(results)
+                        console.log(error)
+                    })
+                }
+            })
+        });
+    }
+}