const CMiscHelp = require("misc_help"); const CTimeHelp = require("timer_help"); let CPluginHelp = cc.Class({ statics: { instance: null }, ctor: function () { this.m_callFun = undefined; this.m_AndroidSDK = window["androidSDK"]; this.m_iosSDK = undefined; this.m_enableSDK = false; this.m_listCaller = {}; }, isEnableSDK : function() { this.initCallerPtr(); return this.m_enableSDK; }, // callback type::( param : any ) => void regSdkCallBack: function( funcName, callback, owner ) { let cbList = this.m_listCaller[ funcName ]; if ( undefined === cbList ) { cbList = []; this.m_listCaller[ funcName ] = cbList; } for( let item of cbList ) { if( item.CB === callback ) { return; } } cbList.push( { CB : callback, OWNER : owner } ); }, removeSdkCallBack: function( funcName, callback ) { let cbList = this.m_listCaller[ funcName ]; if ( undefined === cbList ) { return; } for ( let lCnt = 0; lCnt < cbList.length; ++lCnt ) { if ( callback === cbList[lCnt].CB ) { cbList.splice( lCnt, 1 ); return; } } }, sendSdkCallBack: function( funcName, param ) { let cbList = this.m_listCaller[ funcName ]; if ( cbList ) { for( let itemCb of cbList ) { if ( itemCb && itemCb.CB ) { itemCb.CB.call( itemCb.OWNER, param ); } } } }, callSdk: function( funcName, params ) { this.initCallerPtr(); return this.m_callFun( funcName, params ); }, initCallerPtr: function() { if ( this.m_callFun ) { return; } if ( CMiscHelp.getInstance().isNativeAndroid() ) { this.m_enableSDK = true; this.m_callFun = this._callNativeAndroid; } else if ( CMiscHelp.getInstance().isNativeIOS() ) { this.m_enableSDK = true; this.m_callFun = this._callNativeIOS; } else if ( CMiscHelp.getInstance().isMobileBrowser() ) { if ( CPluginHelp.s_AndroidSDK ) { this.m_enableSDK = true; this.m_callFun = this._callEmbedWebAndroid; } else { let webIosKit = window[ "webkit" ]; if ( webIosKit && webIosKit.messageHandlers ) { this.m_iosSDK = webIosKit.messageHandlers.iosSDK; } if ( this.m_iosSDK ) { this.m_enableSDK = true; this.m_callFun = this._callEmbedWebIOS; } } } if ( ! this.m_callFun ) { this.m_callFun = this._callDefault; } }, _callNativeAndroid: function( funcName, params ) { return jsb.reflection.callStaticMethod( "com.ffengine.FFSDK", "onJsCallSdk", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", funcName, params ); }, _callNativeIOS: function( funcName, params ) { return jsb.reflection.callStaticMethod("FFSDK","onJsCallSdk:params:", funcName, params ); }, _callEmbedWebAndroid: function( funcName, params ) { return this.m_AndroidSDK.onJsCallSdk( funcName, params ); }, _callEmbedWebIOS: function( funcName, params ) { return this.m_iosSDK.postMessage( { "funcName": funcName, "params":params } ); }, _callDefault: function( funcName, params ) { // if ( "platformInfo" === funcName ) { // // let rtVal = { // "deviceId": "6464-64-64-AD3-FF", // "appName": "com.fc.ccc" , // "appVersion": "1.0.1", // "lang": "tw", // "idfa": "05734754305" , // "netType": "4g", // "simulator": "0" , // "ip": "192.168.1.1" , // "gameName": "FC", // "openGM": "1", // "ssl": "0" , // "php": "twsa.qa.fitfun.net:8310", // "channelId": "", // "channelName": "Develop", // "storeOpenID": "0", // "enableGuest": "0", // "hideSwitch": "1", // "gmUrl": "", // "socialUrl": "", // "currency_name": "圓", // "currency_multiple": "1", // "currency_division": "1", // "currency_round": "1" // }; // // return JSON.stringify( rtVal ); // } // else if ( "checkUpdate" === funcName ) { // // let rtVal = { // "success": "0", // "version": "1.0.2", // "changeContent":"0" // }; // // CTimeHelp.getInstance().pushNextFrame( () => { // // CPluginHelp.getInstance().sendSdkCallBack( "checkUpdateDone",rtVal ); // // } ); // } // else if ( "autoLogin" === funcName ) { // // let rtVal = { // "openId": "yzwlk123" // }; // // CTimeHelp.getInstance().pushNextFrame( () => { // // CPluginHelp.getInstance().sendSdkCallBack( "login", rtVal ); // // } ); // } // else if ( "switchAccount" === funcName ) { // // let rtVal = { // "openId": "yzwlk126" // }; // // CTimeHelp.getInstance().pushNextFrame( () => { // // CPluginHelp.getInstance().sendSdkCallBack( "login", rtVal ); // // } ); // } return ""; }, }); CPluginHelp.getInstance = function () { if (!CPluginHelp.instance) { CPluginHelp.instance = new CPluginHelp(); } return CPluginHelp.instance; } module.exports = CPluginHelp; window[ "onPluginCallBack" ] = function ( params ) { let base64Code = window.atob( params ); let realParams = decodeURIComponent( base64Code ); let jsonResult = JSON.parse( realParams, null ); let rtFunName = jsonResult[ "funcName" ]; let rtParams = jsonResult[ "params" ]; CTimeHelp.getInstance().pushNextFrame( () => { CPluginHelp.getInstance().sendSdkCallBack( rtFunName, rtParams ); } ); };