فهرست منبع

同步泰国服务CDK相关代码

mafei 1 سال پیش
والد
کامیت
2ff83c5d3d
2فایلهای تغییر یافته به همراه93 افزوده شده و 27 حذف شده
  1. 50 16
      webServer/src/controller/ApiController.ts
  2. 43 11
      webServer/src/model/CDK.ts

+ 50 - 16
webServer/src/controller/ApiController.ts

@@ -766,35 +766,69 @@ class ApiController {
     }
     async useCDK(ctx) {
         let data = ctx.request.body
-
         let url = await getServerList(data.serverId, 'default')
+        let err = ""
         if (!url) {
-            logger.info(`区服id错误: serverId ${data.serverId}`)
+            
             ctx.body = {
                 code: 1,
                 msg: `区服id错误: serverId ${data.serverId}`
             }
-            return
+            err = "server id invalid"
         }
-        let ret = await CDK.checkCDK(ctx, data.code, data.serverId)
-        if (ret != "success") {
-            ctx.body = {
-                code: 1,
-                msg: ret
+        let param:string = ""
+        // 验证CDK
+        if (err.length == 0) {
+            let batchInfo = await CDK.getCDKItemList(ctx,data.code)
+            if (batchInfo.length <= 0) {
+                err = "invalid code"
+            }else {
+                err = await CDK.checkCDK(ctx, data.code, data.serverId)
             }
-            return
+            param = JSON.stringify({
+                type:"UseCDK",
+                err:err,
+                batchInfo:batchInfo
+            })
         }
+        // 固定码
+        if(err == "cdk not found" || err == "server id invalid"){
+            param = JSON.stringify({
+                code:data.code,
+                type:"UseFixCDK"
+            })
+        }
+        // 测试是否可以调用过去
         // 通知给服务器,发放道具
+        // "ws://43.143.193.23:18192"
         Msg.connect(url, Account);
-        let itemListStr = CDK.getCDKItemList(data.code)
-        if (itemListStr.length <= 0) {
-            ctx.body = {
-                code: 1,
-                msg: "invalid code"
+        new Promise((resolve) => {
+            setTimeout(async () => {
+                Msg.CG_TEST_PROTO(data.account,param)
+            }, 500);
+        });
+        ctx.body = {
+            code: 0,    
+            msg: "success"
+        }
+    }
+
+    async validCDK (ctx) {
+        let data = ctx.request.body
+        if (data.code.length == 10) {
+            let ret = await CDK.useCDK(ctx, data.code)
+            if (ret != "success") {
+                ctx.body = {
+                    code: 1,    
+                    msg: ret
+                }
+                return
             }
         }
-        // 测试是否可以调用过去
-        Msg.CG_CDK_Item(itemListStr)
+        ctx.body = {
+            code: 0,    
+            msg: "success"
+        }
     }
 }
 

+ 43 - 11
webServer/src/model/CDK.ts

@@ -12,6 +12,8 @@ interface CDKData {
     code : string,  // json字符串
 }
 
+let CDKCache:Map<string,number> =  new Map()
+
 const code:string[] = ["0","c","e","u","m",
     "k","d","7","x","f",
     "9","j","w","6","8",
@@ -51,7 +53,7 @@ function transNumber(num:number):[number,number,number]{
 }
 
 function calcNumber(first:number,second:number,third:number) {
-    if (first == undefined || second == undefined || third == undefined) {
+    if (first === undefined || second === undefined || third === undefined) {
         return -1
     }
     if (first > unit || second > unit || third > unit) {
@@ -86,7 +88,7 @@ function decodeCDK(code:string):[boolean,number,number] {
     if (idx < 0 ) {
         return [false,0,0]
     }
-    let batch = calcNumber(codeMap.get[code[7]],codeMap.get(code[5]),codeMap.get(code[6]))
+    let batch = calcNumber(codeMap.get(code[7]),codeMap.get(code[5]),codeMap.get(code[6]))
     if (batch < 0) {
         return [false,0,0]
     }
@@ -118,10 +120,10 @@ class CDK {
         return await pipeline.exec()
     }
 
-    async getCDK(ctx,batch:number){
+    async getCDK(ctx,batch:number){ 
         const redisClient = ctx.redis.client;
         let curBatch = await redisClient.get(redis_batch_incr)
-        if (curBatch < batch) {
+        if (Number(curBatch) < batch) {
             return ""
         }
         let batch_info_key = redis_cdk_batch +  batch
@@ -136,13 +138,14 @@ class CDK {
         })*/
         let cdkdata : CDKData = {
             batch:batch_info,
-            code: JSON.stringify(ret)
+            code: ret
         }
         return JSON.stringify(cdkdata)
     }
 
     async getCDKItemList(ctx,code:string) {
-        const redisClient = ctx.redis.client;
+        logger.info(`收到cdk is :${code}`)
+        const redisClient = ctx.redis.client
         let [ok,batch,index] = decodeCDK(code)
         if (!ok) {
             return ""
@@ -152,15 +155,43 @@ class CDK {
         if (batch_info_ret == undefined || batch_info_ret == null ) {
             return ""
         }
-        let batch_info = batch_info_ret as CDKInfo
-        return batch_info.itenList
+        return batch_info_ret
+    }
+
+    async useCDK(ctx,code:string) {
+        logger.info(` checkCDK 收到cdk is :${code}`)
+        let [ok,batch,index] = decodeCDK(code)
+        if (!ok) {
+            return "invalid code"
+        }
+        const redisClient = ctx.redis.client;
+        let cdk_hset_key = redis_cdk + batch
+        // 必须保持原子性,只能用eval
+        let evalStr = `
+        local cdk = redis.call('hget',KEYS[1],KEYS[2])
+        if not cdk then 
+            return -1
+        end
+        redis.call('hdel',KEYS[1],KEYS[2])
+        return 0
+        `
+        let ret = await redisClient.eval(evalStr,2,cdk_hset_key,code)
+        if (ret == -1) {
+            return 'cdk not found'
+        }
+        return "success"
     }
 
     async checkCDK(ctx,code:string,serverId : number) {
+        logger.info(` checkCDK 收到cdk is :${code}`)
         let [ok,batch,index] = decodeCDK(code)
         if (!ok) {
             return "invalid code"
         }
+        let time =  CDKCache.get(code) 
+        if (time != undefined && time > Date.now()) {
+            return "invalid code"
+        }
         const redisClient = ctx.redis.client;
         // 先判断是否满足batch
         let batch_info_key = redis_cdk_batch +  batch
@@ -168,7 +199,8 @@ class CDK {
         if (batch_info_ret == undefined || batch_info_ret == null ) {
             return "batch not found"
         }
-        let batch_info = batch_info_ret as CDKInfo
+        let batch_info = JSON.parse(batch_info_ret)  as CDKInfo
+
         let jsonret = JSON.parse(batch_info.serverList)
         let serverList  = jsonret as number[]
         let isServer = false
@@ -185,16 +217,16 @@ class CDK {
         // 必须保持原子性,只能用eval
         let evalStr = `
         local cdk = redis.call('hget',KEYS[1],KEYS[2])
-        if not ckd then 
+        if not cdk then 
             return -1
         end
-        redis.call('hdel',KEYS[1],KEYS[2])
         return 0
         `
         let ret = await redisClient.eval(evalStr,2,cdk_hset_key,code)
         if (ret == -1) {
             return 'cdk not found'
         }
+        CDKCache.set(code,Date.now() + 2000)
         return "success"
     }
 }