Просмотр исходного кода

Merge branch 'master' of http://git.mokasz.com/zouyong/mk_framework

薛鸿潇 5 лет назад
Родитель
Сommit
f41ead4d83
25 измененных файлов с 376 добавлено и 90 удалено
  1. 0 0
      mk_framework/assets/resources/module/login.meta
  2. 0 0
      mk_framework/assets/resources/module/login/1.txt
  3. 1 1
      mk_framework/assets/resources/prefab/uiPanel.meta
  4. 0 28
      mk_framework/assets/resources/prefab/uiPanel/2.ts
  5. 16 2
      mk_framework/assets/resources/prefab/uiPanel/login.prefab
  6. 0 0
      mk_framework/assets/resources/prefab/uiPanel/login.prefab.meta
  7. 4 2
      mk_framework/assets/script/Main.ts
  8. 14 0
      mk_framework/assets/script/game/data/AdData.ts
  9. 1 1
      mk_framework/assets/script/game/data/AdData.ts.meta
  10. 4 0
      mk_framework/assets/script/game/data/AppData.ts
  11. 11 2
      mk_framework/assets/script/game/data/GameData.ts
  12. 21 6
      mk_framework/assets/script/game/data/HttpData.ts
  13. 188 3
      mk_framework/assets/script/game/data/LoginData.ts
  14. 20 0
      mk_framework/assets/script/game/data/StorageData.ts
  15. 9 0
      mk_framework/assets/script/game/data/StorageData.ts.meta
  16. 6 1
      mk_framework/assets/script/game/data/g.ts
  17. 12 0
      mk_framework/assets/script/game/module/cash.meta
  18. 12 0
      mk_framework/assets/script/game/module/cash/sign.meta
  19. 12 0
      mk_framework/assets/script/game/module/cash/turntable.meta
  20. 0 0
      mk_framework/assets/script/game/module/cash/turntable/Tur
  21. 5 0
      mk_framework/assets/script/game/module/cash/turntable/Tur.meta
  22. 6 16
      mk_framework/assets/script/game/module/common/login/Login.ts
  23. 11 21
      mk_framework/assets/script/mk/system/HttpSystem.ts
  24. 9 2
      mk_framework/assets/script/mk/system/MKSystem.ts
  25. 14 5
      mk_framework/assets/script/mk/utils/StorageUtil.ts

+ 0 - 0
mk_framework/assets/resources/module/load.meta → mk_framework/assets/resources/module/login.meta


+ 0 - 0
mk_framework/assets/resources/module/login/1.txt


+ 1 - 1
mk_framework/assets/resources/prefab/uiPanel.meta

@@ -1,6 +1,6 @@
 {
   "ver": "1.1.2",
-  "uuid": "5f6a5e40-4f94-4ec2-af69-8e84bfe8bfed",
+  "uuid": "b206b900-d2f8-4d0e-9c8a-cc37444de8aa",
   "isBundle": false,
   "bundleName": "",
   "priority": 1,

+ 0 - 28
mk_framework/assets/resources/prefab/uiPanel/2.ts

@@ -1,28 +0,0 @@
-// Learn TypeScript:
-//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
-// Learn Attribute:
-//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
-// Learn life-cycle callbacks:
-//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
-
-const {ccclass, property} = cc._decorator;
-
-@ccclass
-export default class NewClass extends cc.Component {
-
-    @property(cc.Label)
-    label: cc.Label = null;
-
-    @property
-    text: string = 'hello';
-
-    // LIFE-CYCLE CALLBACKS:
-
-    // onLoad () {}
-
-    start () {
-
-    }
-
-    // update (dt) {}
-}

+ 16 - 2
mk_framework/assets/resources/module/load/load.prefab → mk_framework/assets/resources/prefab/uiPanel/login.prefab

@@ -25,9 +25,13 @@
       }
     ],
     "_active": true,
-    "_components": [],
+    "_components": [
+      {
+        "__id__": 7
+      }
+    ],
     "_prefab": {
-      "__id__": 7
+      "__id__": 8
     },
     "_opacity": 255,
     "_color": {
@@ -255,6 +259,16 @@
     "sync": false
   },
   {
+    "__type__": "ca57eOwH7JIu7HYByoK3xGf",
+    "_name": "",
+    "_objFlags": 0,
+    "node": {
+      "__id__": 1
+    },
+    "_enabled": true,
+    "_id": ""
+  },
+  {
     "__type__": "cc.PrefabInfo",
     "root": {
       "__id__": 1

+ 0 - 0
mk_framework/assets/resources/module/load/load.prefab.meta → mk_framework/assets/resources/prefab/uiPanel/login.prefab.meta


+ 4 - 2
mk_framework/assets/script/Main.ts

@@ -1,7 +1,9 @@
+import UISystem from "./mk/system/UISystem";
+
 const { ccclass, property } = cc._decorator;
 
 @ccclass
-export default class main extends cc.Component {
+export default class Main extends cc.Component {
     @property({
         type: cc.Asset,
     })
@@ -9,6 +11,6 @@ export default class main extends cc.Component {
 
     start() {
         console.log("init");
-        
+        mk.ui.openPanel("login");
     }
 }

+ 14 - 0
mk_framework/assets/script/game/data/AdData.ts

@@ -0,0 +1,14 @@
+/**
+ * @description 广告数据
+ * @author 邹勇
+ */
+ export class AdData{
+
+    
+
+
+    public init(){
+        
+    }
+    
+}

+ 1 - 1
mk_framework/assets/resources/prefab/uiPanel/2.ts.meta → mk_framework/assets/script/game/data/AdData.ts.meta

@@ -1,6 +1,6 @@
 {
   "ver": "1.0.8",
-  "uuid": "63235b10-da18-4188-b3a6-b0db180fa7ac",
+  "uuid": "751e275f-70d0-46ea-9894-00e05881a1b0",
   "isPlugin": false,
   "loadPluginInWeb": true,
   "loadPluginInNative": true,

+ 4 - 0
mk_framework/assets/script/game/data/AppData.ts

@@ -16,4 +16,8 @@ export class AppData{
 
     public mac:string = 'c9:65:e2:1c:b0:23,f6:60:e4:1a:b7:27';
     
+
+    public init(){
+        
+    }
 }

+ 11 - 2
mk_framework/assets/script/game/data/GameData.ts

@@ -1,8 +1,17 @@
 /**
- * @description 游戏数据
+ * @description 游戏核心玩法数据
  * @author 邹勇
  */
-export class GameData{
+export class GameData {
 
+    public dataFinish:boolean = false;
 
+
+    public async init() {
+        let data = { "versionCode": g.appData.version };
+        let response = await mk.http.sendData('getAllConfigInfo', JSON.stringify(data));
+        if (response.errcode != 0) {
+            return;
+        }
+    }
 }

+ 21 - 6
mk_framework/assets/script/game/data/HttpData.ts

@@ -2,18 +2,33 @@
  * @description 服务器相关数据
  * @author 邹勇
  */
-export class HttpData{
+export class HttpData {
 
-    ranKey:string = '';
+    /** 服务器类型 0测试服 1正式服 2李扬服 3悍国服 */
+    public serverType: number = 0;
+
+    public getServerUrl(): string {
+        switch (this.serverType) {
+            case 0:
+                return ServerUrl.test;
+            case 1:
+                return ServerUrl.formal;
+            case 2:
+                return ServerUrl.liyang;
+            case 3:
+                return ServerUrl.hanguo;
+        }
+        return ServerUrl.formal;
+    }
 
 }
 
 
-export enum ServerUrl{
-    test = '',
+export enum ServerUrl {
+    test = 'https://tafang-test.duiweize.com/',
     formal = '',
-    liyang = '',
-    hanguo = '',
+    liyang = 'http://172.16.15.231:9092/',
+    hanguo = 'http://172.16.15.167:9092/',
 }
 
 /** 向服务器发送数据类型 */

+ 188 - 3
mk_framework/assets/script/game/data/LoginData.ts

@@ -1,10 +1,195 @@
+import { StorageKey } from "./StorageData";
+
 /**
  * @description 登录数据
  * @author 邹勇
  */
-export class LoginData{
+export class LoginData {
+
+    /** 是否登录 */
+    public isLogin: boolean = false;
+
+    public sessionKey: string = '';
+
+    /** 玩家唯一id */
+    public uin: string = '';
+
+    /** 玩家临时id */
+    public tempUin: string = '';
+
+    public loginTicket: string = '';
+
+    public isFirstIn: boolean;
+
+    public isNew: boolean;
+
+    /** 是否授权 */
+    public isAuth: boolean;
+
+
+
+    /**
+     * 登录流程 initApp-->initAd-->connect-->wxLogin-->checkLogin-->getAccountInfo
+     */
+    public async login() {
+        this.isLogin = true;
+        g.appData.init();
+        g.adData.init();
+
+        //有登录记录直接跳转到登录流程最后一步
+        if (this.sessionKey != '' && this.uin != '') {
+            this.getAccountInfo();
+            return;
+        }
+
+        let ranKey = mk.encrypt.randomString();
+        let data: any = {
+            "mac": g.appData.mac,
+            "psk": ranKey,
+            "appId": g.appData.appId
+        }
+
+        //connect
+        let response = await mk.http.sendRequest('connectTest', 'POST', JSON.stringify(data));
+        if (response.errcode != 0) {
+            return;
+        }
+        data = mk.encrypt.decrypt(response.encrypt, ranKey, g.appData.appId);
+        this.tempUin = JSON.parse(data).tmp_uin;
+
+        //wxLogin
+        let encode;
+        if (g.wechatData.code != null) {//微信登录
+            encode = mk.encrypt.encrypt(JSON.stringify({ "code": g.wechatData.code }), this.sessionKey, g.appData.appId);
+            data = {
+                "uin": this.uin,
+                "encrypt": encode
+            };
+        }
+        else {//游客登录
+            encode = mk.encrypt.encrypt(JSON.stringify({ "code": g.wechatData.code }), ranKey, g.appData.appId);
+            data = {
+                "uin": this.tempUin,
+                "encrypt": encode
+            };
+        }
+        response = await mk.http.sendRequest('wxlogin', 'POST', JSON.stringify(data), false, false);
+        if (response.errcode != 0) {
+            return;
+        }
+        if (g.wechatData.code != null) {
+            data = mk.encrypt.decrypt(response.encrypt, this.sessionKey, g.appData.appId);
+        }
+        else {
+            data = mk.encrypt.decrypt(response.encrypt, ranKey, g.appData.appId);
+        }
+        data = JSON.parse(data);
+        this.loginTicket = data.login_ticket;
+        mk.storage.setStorage(StorageKey.loginTicket, this.loginTicket);
+
+        let isFirstIn = mk.storage.getStorage('isFirstIn');
+        if (isFirstIn == null) {
+            this.isFirstIn = true;
+            mk.storage.setStorage(StorageKey.isFirstIn, 1);
+        }
+
+        if (this.uin != data.uin) {
+            this.uin = data.uin;
+            this.isNew = false;
+        }
+        else {
+            this.isNew = true;
+        }
+        mk.storage.setStorage('uin', this.uin);
+
+        //checkLogin
+        let tmp_key = '';
+        if (g.wechatData.code != null) {
+            tmp_key = this.sessionKey;
+        }
+        else {
+            tmp_key = mk.encrypt.randomString();
+        }
+
+        data = {
+            "tmp_key": tmp_key,
+            "uin": this.uin,
+            "login_ticket": this.loginTicket,
+            "appId": g.appData.appId
+        }
+        response = await mk.http.sendRequest('checklogin', 'POST', JSON.stringify(data));
+        if (response.errcode != 0) {
+            return;
+        }
+        if (g.wechatData.code != null) {
+            data = mk.encrypt.decrypt(response.encrypt, this.sessionKey, g.appData.appId);
+        }
+        else {
+            data = mk.encrypt.decrypt(response.encrypt, tmp_key, g.appData.appId);
+        }
+
+        data = JSON.parse(data);
+        this.sessionKey = data.session_key;
+
+        mk.storage.setStorage('sessionKey', this.sessionKey);
+
+        if (g.wechatData.code != null) {
+            if (this.isNew) {//玩过此游戏并且本地数据是本机的
+                this.getAccountInfo();
+            }
+            else {//玩过此游戏 但 本地数据不是本账户的 清空数据 重新登录游戏
+                this.isNew = false;
+                g.wechatData.code = null;
+                this.reload();
+            }
+        }
+        else {
+            this.getAccountInfo();
+        }
+    }
+
+    private async getAccountInfo() {
+        let nickname = mk.storage.getStorage(StorageKey.nickname);
+        if (nickname) {
+            g.wechatData.nickName = nickname;
+        }
+        else {
+            let aa = {
+                "uin": this.uin,
+                "login_ticket": this.loginTicket
+            };
+
+            let data: any = {
+                "uin": this.uin,
+                "encrypt": mk.encrypt.encrypt(JSON.stringify(aa), this.sessionKey, g.appData.appId)
+            };
+
+            let response = await mk.http.sendRequest('user', 'POST', JSON.stringify(data), false, false);
+            if (response.errcode != 0) {
+                return;
+            }
+            response = mk.http.checkData(response, true);
+            data = response.data;
+            this.isAuth = data.is_auth;
+            if (this.isAuth) {
+                g.wechatData.nickName = data.nickname;
+                g.wechatData.avatar = data.headimgurl;
+                mk.storage.setStorage(StorageKey.isAuth, 1);
+                mk.storage.setStorage(StorageKey.nickname, g.wechatData.nickName, false);
+                mk.storage.setStorage(StorageKey.avatar, g.wechatData.avatar, false);
+            }
+        }
+
+        //获取游戏数据
+        g.gameData.init();
+    }
+
+
 
-    public sessionKey:string = '';
+    /**
+     * 本地数据不是本账户的 清空数据 重新登录游戏
+     */
+    private reload() {
 
-    public uin:string = '';
+    }
 }

+ 20 - 0
mk_framework/assets/script/game/data/StorageData.ts

@@ -0,0 +1,20 @@
+/**
+ * @description 本地缓存
+ * @author 邹勇
+ */
+export class StorageData {
+
+    /** 本地缓存key */
+    public storageKey: string = 'wewishyouamerrychristmaswithout996';
+}
+
+
+export enum StorageKey{
+    loginTicket = 'loginTicket',
+    isFirstIn = 'isFirstIn',
+    uin = 'uin',
+    sessionKey = 'sessionKey',
+    nickname = 'nickname',
+    isAuth = 'isAuth',
+    avatar = 'avatar',
+}

+ 9 - 0
mk_framework/assets/script/game/data/StorageData.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "71435d88-5b30-4e0a-8c25-f4eaa8e03064",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 6 - 1
mk_framework/assets/script/game/data/g.ts

@@ -1,7 +1,9 @@
+import { AdData } from "./AdData";
 import { AppData } from "./AppData";
 import { GameData } from "./GameData";
 import { HttpData } from "./HttpData";
 import { LoginData } from "./LoginData";
+import { StorageData } from "./StorageData";
 import { WechatData } from "./WechatData";
 
 /**
@@ -19,6 +21,8 @@ class g {
     public gameData:GameData;
     public wechatData:WechatData;
     public httpData:HttpData;
+    public adData:AdData;
+    public storageData:StorageData;
 
     init() {
         this.appData = new AppData();
@@ -26,7 +30,8 @@ class g {
         this.gameData = new GameData();
         this.wechatData = new WechatData();
         this.httpData = new HttpData();
-
+        this.adData = new AdData();
+        this.storageData = new StorageData();
     }      
 }
 

+ 12 - 0
mk_framework/assets/script/game/module/cash.meta

@@ -0,0 +1,12 @@
+{
+  "ver": "1.1.2",
+  "uuid": "42cbe10f-5b94-498a-af86-aa0e72204c7f",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 12 - 0
mk_framework/assets/script/game/module/cash/sign.meta

@@ -0,0 +1,12 @@
+{
+  "ver": "1.1.2",
+  "uuid": "78c79a46-c440-4e5b-b8e4-f1a8aabb3092",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 12 - 0
mk_framework/assets/script/game/module/cash/turntable.meta

@@ -0,0 +1,12 @@
+{
+  "ver": "1.1.2",
+  "uuid": "1981eae6-9fb7-4427-be8b-541d0c471ab4",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 0 - 0
mk_framework/assets/script/game/module/cash/turntable/Tur


+ 5 - 0
mk_framework/assets/script/game/module/cash/turntable/Tur.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "1.0.1",
+  "uuid": "b228b610-53f6-4190-bd39-c23cb3ab8bb7",
+  "subMetas": {}
+}

+ 6 - 16
mk_framework/assets/script/game/module/common/login/Login.ts

@@ -4,7 +4,7 @@ const { ccclass, property } = cc._decorator;
 export default class Login extends cc.Component {
 
     onLoad() {
-        g.wechatData.code = "";
+        
     }
 
     start() {
@@ -15,22 +15,12 @@ export default class Login extends cc.Component {
 
 
     update() {
-        if (g.wechatData.code) {
-            this.doLogin();
-            g.wechatData.code = null;
+        if (!g.loginData.isLogin) {
+            g.loginData.login();
         }
-    }
-
-    private async doLogin(account: string = null, nickName: string = '', avator: string = '') {
-        g.httpData.ranKey = mk.encrypt.randomString();
-        let data = {
-            "mac": g.appData.mac,
-            "psk": g.httpData.ranKey,
-            "appId": g.appData.appId
+        if(g.gameData.dataFinish){//登录流程完毕
+            console.log('isLoginSuccess...');
+            this.destroy();
         }
-
-        let result = await mk.http.sendRequest( 'POST', JSON.stringify(data));
-        console.log(result);
     }
-
 }

+ 11 - 21
mk_framework/assets/script/mk/system/HttpSystem.ts

@@ -10,10 +10,9 @@ export default class HttpSystem {
      * 游戏接口,通用
      * @param url 接口完整地址
      * @param data 加密前数据
-     * @param errorPop 请求失败是否弹窗
      * @param async 是否异步请求(后端要求防阻塞)
      */
-    public async sendData(url, data: any, errorPop = true, async = true) {
+    public async sendData(url, data: any, async = true) {
         let encode = '';
         let dataN = null;
         data.timestamp = Math.floor(new Date().getTime() / 1000);
@@ -25,8 +24,7 @@ export default class HttpSystem {
             "uin": g.loginData.uin,
             "encrypt": encode
         }
-        mk.console.log('httpRequest', url, data, dataN);
-        let result = await this.sendRequest(url, 'POST', JSON.stringify(dataN), false, errorPop, async);
+        let result = await this.sendRequest(url, 'POST', JSON.stringify(dataN), false, async);
         return this.checkData(result);
     }
 
@@ -36,10 +34,10 @@ export default class HttpSystem {
      * @param method 'GET' || 'POST' 
      * @param data 数据
      * @param isRsa 是否加密
-     * @param errorPop 请求失败时是否弹窗
      * @param async 是否异步请求
      */
-    public sendRequest(url, method: string = 'POST', data: string = null, isRsa: boolean = true, errorPop = true, async = true) {
+    public sendRequest(url, method: string = 'POST', data: string = null, isRsa: boolean = true, async = true) {
+        url = g.httpData.getServerUrl() + url;
         return new Promise<any>((resolve: (data: any) => void, reject) => {
             let requesttimes = 0;
             let httpRequest = new XMLHttpRequest();
@@ -58,20 +56,12 @@ export default class HttpSystem {
                     if (httpRequest.status === 200) {
                         var responseStr = httpRequest.responseText;
                         let response = JSON.parse(responseStr);
-                        response.errorcode = response.errcode;
                         mk.console.log('httpResponse', url, response);
-                        if (response.errcode == -10003) {
-                            reject(10003);
-                        }
-                        else {
-                            if (response.errcode != 0) {
-                                resolve(response);
-                            }
-                        }
+                        resolve(response);
                     }
                     else {
-                        mk.console.log("httpRequest.status", httpRequest.status);
-                        reject(httpRequest.status);
+                        mk.console.error("httpRequest.status", httpRequest.status);
+                        reject({ errcode: 1, errmsg: "status..." + httpRequest.status });
                     }
                 }
             }
@@ -79,16 +69,16 @@ export default class HttpSystem {
             httpRequest.ontimeout = function (e) {
                 requesttimes++;
                 if (requesttimes >= 3) {
-                    mk.console.log("http.ontimeout", url);
-                    reject("timeout");
+                    mk.console.error("http.ontimeout", url);
+                    reject({ errcode: 1, errmsg: "ontimeout" });
                 }
                 else {
                     send();
                 }
             };
             httpRequest.onerror = function (e) {
-                mk.console.log("http.onerror", url);
-                reject("onerror");
+                mk.console.error("http.onerror", url);
+                reject({ errcode: 1, errmsg: "onerror" });
             };
             send();
         });

+ 9 - 2
mk_framework/assets/script/mk/system/MKSystem.ts

@@ -41,6 +41,7 @@ class MKSystem {
     data: DataSystem;
     http: HttpSystem;
     audio: AudioSystem;
+    /** 挂载在MainScene的界面上,不需要new */
     ui: UISystem;
     timer: TimerSystem;
     event: EventSystem;
@@ -49,17 +50,23 @@ class MKSystem {
         //工具
         this.time = new TimeUtil();
         this.file = new FileUtil();
-        this.loader = new LoadResUtil();
         this.encrypt = new EncryptUtil();
         this.console = new LogUtil();
+        this.game = new GameUtil();
+        this.loader = new LoadResUtil();
+        this.storage = new StorageUtil();
+        this.math = new MathUtil();
 
         //sdk
         this.bugly = new BuglySDK();
 
         //system
-        this.audio = new AudioSystem();
         this.data = new DataSystem();
         this.http = new HttpSystem();
+        this.audio = new AudioSystem();
+
+        this.timer = new TimerSystem();
+        this.event = new EventSystem();
 
     }
 }

+ 14 - 5
mk_framework/assets/script/mk/utils/StorageUtil.ts

@@ -6,10 +6,15 @@ export default class StorageUtil {
 
     /**
      * 获取存储
-     * @param:key key值
+     * @param   key         key值
+     * @param   decrypt     是否需要解密
      */
-    public getStorage(key: string): any {
+    public getStorage(key: string, decrypt = true): any {
         if (cc.sys.localStorage.getItem(key)) {
+            if(decrypt){
+
+            }
+            
             return JSON.parse(cc.sys.localStorage.getItem(key));
         }
         else {
@@ -19,10 +24,14 @@ export default class StorageUtil {
 
     /**
      * 存储
-     * @param: key key值
-     * @param: value 要存储的value值
+     * @param   key     key值
+     * @param   value   要存储的value值
+     * @param   encrypt 是否需要加密
      */
-    public setStorage(key: string, value: any) {
+    public setStorage(key: string, value: any, encrypt: boolean = true) {
+        if (encrypt) {
+            value = mk.encrypt.encrypt(value, g.storageData.storageKey, g.appData.appId);
+        }
         cc.sys.localStorage.setItem(key, JSON.stringify(value));
     }
 }