528 lines
18 KiB
C++
528 lines
18 KiB
C++
/**
|
|
@file JSGlobalExportCFun.cpp
|
|
@brief
|
|
@author James
|
|
@version 1.0
|
|
@date 2013_11_12
|
|
*/
|
|
|
|
#include "JSGlobalExportCFun.h"
|
|
#include "../JSInterface/JSInterface.h"
|
|
#include <util/Log.h>
|
|
#include <util/JCCommonMethod.h>
|
|
#include <fileSystem/JCFileSystem.h>
|
|
#include <util/JCMemorySurvey.h>
|
|
#include <util/JCLayaUrl.h>
|
|
#include <util/JCCrypto.h>
|
|
#include <util/Log.h>
|
|
#include "JSConsole.h"
|
|
#include "XMLHttpRequest.h"
|
|
#include "JSConchConfig.h"
|
|
#include "JSXmlNode.h"
|
|
#include "JSXmlAttr.h"
|
|
#include "JSDOMParser.h"
|
|
#include "JSAudio.h"
|
|
#include "JSAppCache.h"
|
|
#include "JSWebSocket.h"
|
|
#include "JSFileSystem.h"
|
|
#include "JSZip.h"
|
|
#include "JSNotify.h"
|
|
#ifdef ANDROID
|
|
#include "JSAndroidEditBox.h"
|
|
#include "../../CToJavaBridge.h"
|
|
#elif WIN32
|
|
#include <Windows.h>
|
|
#include "JSWindowEditBox.h"
|
|
#elif __APPLE__
|
|
#include "JSIOSEditBox.h"
|
|
#include "CToObjectC.h"
|
|
#endif
|
|
#include "JSRuntime.h"
|
|
#include "../../JCConch.h"
|
|
#include <downloadCache/JCFileSource.h>
|
|
#include "JSImage.h"
|
|
#include "JSHistory.h"
|
|
#include "JSTextMemoryCanvas.h"
|
|
#include <downloadMgr/JCDownloadMgr.h>
|
|
#include "JSLayaGL.h"
|
|
#include "JSShaderActiveInfo.h"
|
|
#include "JSTextBitmapInfo.h"
|
|
#include "JSShaderPrecisionFormat.h"
|
|
#include "JSCallbackFuncObj.h"
|
|
#include "Bullet/bullet_glue.h"
|
|
#include "Video/JSVideo.h"
|
|
#include <LayaGL/JCLayaGLDispatch.h>
|
|
#include "JCWebGLPlus.h"
|
|
#include "Bullet/LayaBulletExport.h"
|
|
extern int g_nInnerWidth ;
|
|
extern int g_nInnerHeight ;
|
|
extern bool g_bGLCanvasSizeChanged;
|
|
#ifdef WIN32
|
|
int g_bEnableTouch = false;
|
|
#elif ANDROID
|
|
int g_bEnableTouch = true;
|
|
#elif __APPLE__
|
|
int g_bEnableTouch = true;
|
|
#endif
|
|
std::string g_sExePath = "";
|
|
|
|
/** @brief 这个函数是为了实现comman库中的alert函数
|
|
* 不定长的函数
|
|
*/
|
|
void alert(const char* fmt, ...)
|
|
{
|
|
char buf[1024];
|
|
char* pBuf = NULL;
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
int len = vsprintf(buf, fmt, args);
|
|
if (len < 0) {
|
|
pBuf = new char[4096];
|
|
len = vsprintf(pBuf, fmt, args);
|
|
}
|
|
va_end(args);
|
|
laya::LayaAlert(pBuf ? pBuf : buf);
|
|
if (pBuf)
|
|
{
|
|
delete[] pBuf;
|
|
}
|
|
}
|
|
namespace laya
|
|
{
|
|
//下载大文件,zip用的
|
|
struct JSFuncWrapper :public JsObjBase
|
|
{
|
|
enum { onprogid, oncompid };
|
|
static JsObjClassInfo JSCLSINFO;
|
|
JsObjHandle funcOnProg;
|
|
JsObjHandle funcOnComp;
|
|
bool stop;
|
|
JSFuncWrapper(JSValueAsParam onprog, JSValueAsParam onComp)
|
|
{
|
|
createJSObj();
|
|
funcOnProg.set(onprogid, this, onprog);
|
|
funcOnComp.set(oncompid, this, onComp);
|
|
stop = false;
|
|
}
|
|
};
|
|
ADDJSCLSINFO(JSFuncWrapper, JSObjNode);
|
|
|
|
void downloadBig_onProg_js(JSFuncWrapper* pWrapper, unsigned int total, unsigned int now, float speed)
|
|
{
|
|
if (pWrapper->funcOnProg.Empty())return;
|
|
pWrapper->funcOnProg.Call(total, now, speed);
|
|
pWrapper->stop = __TransferToCpp<bool>::ToCpp(pWrapper->funcOnProg.m_pReturn);
|
|
}
|
|
int downloadBig_onProg(unsigned int total, unsigned int now, float speed, JSFuncWrapper* pWrapper)
|
|
{
|
|
if (pWrapper && pWrapper->stop)return 1;
|
|
JCScriptRuntime::s_JSRT->m_pPoster->postToJS(std::bind(downloadBig_onProg_js, pWrapper, total, now, speed));
|
|
return 0;
|
|
}
|
|
void downloadBig_onComp_js(int curlret, int httpret, JSFuncWrapper* pWrapper)
|
|
{
|
|
if (!pWrapper->IsMyJsEnv()){
|
|
delete pWrapper;
|
|
return;
|
|
}
|
|
if (!pWrapper->funcOnComp.Empty())
|
|
{
|
|
pWrapper->funcOnComp.Call(curlret,httpret);
|
|
}
|
|
delete pWrapper;
|
|
}
|
|
void downloadBig_onComp(JCBuffer& buff, const std::string& localip,const std::string& svip, int curlret, int httpret,const std::string& httpresheader, JSFuncWrapper* pWrapper)
|
|
{
|
|
JCScriptRuntime::s_JSRT->m_pPoster->postToJS(std::bind(downloadBig_onComp_js, curlret,httpret, pWrapper));
|
|
}
|
|
long _downloadBigFile(const char* p_pszUrl, const char* p_pszLocal, JSValueAsParam p_ProgCb,JSValueAsParam p_CompleteCb, int p_nTryNum, int p_nOptTimeout)
|
|
{
|
|
/*
|
|
if (!canWrite(pCurProcess->getFSPermission(p_pszLocal))) {
|
|
JSP_THROW("downloadBigFile to this localfile is forbidden!");
|
|
LOGE("本用户不允许在%s目录下写文件", p_pszLocal);
|
|
return 0;
|
|
}
|
|
*/
|
|
JCDownloadMgr* dmgr = JCDownloadMgr::getInstance();
|
|
JSFuncWrapper* pJSObj = new JSFuncWrapper(p_ProgCb, p_CompleteCb);
|
|
dmgr->downloadBigFile(p_pszUrl, p_pszLocal,
|
|
std::bind(downloadBig_onProg, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, pJSObj),
|
|
std::bind(downloadBig_onComp, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, pJSObj),
|
|
p_nTryNum, p_nOptTimeout);;
|
|
return (long)pJSObj;
|
|
}
|
|
void downloadHeader_onComp_js(char* pBuff, int curlret, int httpret, JSFuncWrapper* pWrapper)
|
|
{
|
|
if (!pWrapper->IsMyJsEnv())
|
|
{
|
|
delete pWrapper;
|
|
return;
|
|
}
|
|
if (!pWrapper->funcOnComp.Empty())
|
|
{
|
|
if (pBuff)
|
|
{
|
|
pWrapper->funcOnComp.Call(curlret, httpret, pBuff);
|
|
delete [] pBuff;
|
|
}
|
|
else
|
|
{
|
|
pWrapper->funcOnComp.Call(curlret, httpret);
|
|
}
|
|
}
|
|
delete pWrapper;
|
|
}
|
|
void downloadHeader_onComp(JCBuffer& buff, const std::string& localip,
|
|
const std::string& svip, int curlret, int httpret,
|
|
const std::string& httpresheader, JSFuncWrapper* pWrapper)
|
|
{
|
|
char* pBuff = nullptr;
|
|
if (buff.m_pPtr && buff.m_nLen)
|
|
{
|
|
//这个肯定是字符串
|
|
pBuff = new char[buff.m_nLen+1];
|
|
memcpy(pBuff, buff.m_pPtr, buff.m_nLen);
|
|
pBuff[buff.m_nLen] = 0;
|
|
}
|
|
JCScriptRuntime::s_JSRT->m_pPoster->postToJS(std::bind(downloadHeader_onComp_js, pBuff, curlret, httpret, pWrapper));
|
|
}
|
|
long _downloadGetHeader(const char* p_pszUrl, JSValueAsParam p_CompleteCb, int p_nTryNum, int p_nOptTimeout)
|
|
{
|
|
JCDownloadMgr* dmgr = JCDownloadMgr::getInstance();
|
|
JSFuncWrapper* pJSObj = new JSFuncWrapper(p_CompleteCb, p_CompleteCb);//第一个没有用
|
|
dmgr->getHeader(p_pszUrl,
|
|
std::bind(downloadHeader_onComp, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, pJSObj),
|
|
p_nTryNum, p_nOptTimeout);
|
|
return (long)pJSObj;
|
|
}
|
|
void setTouchEvtFunc(JSValueAsParam pObj)
|
|
{
|
|
}
|
|
void setKeyEvtFunc(JSValueAsParam pObj)
|
|
{
|
|
}
|
|
void setJoystickEvtFunc(JSValueAsParam pObj)
|
|
{
|
|
}
|
|
void evalJS(const char* p_sSource)
|
|
{
|
|
JSP_RUN_SCRIPT(p_sSource);
|
|
}
|
|
void JSPrint(const char* p_sBuffer)
|
|
{
|
|
int nLen = strlen(p_sBuffer) + 3;
|
|
unsigned short* ucStr = new unsigned short[nLen];
|
|
int nlen = UTF8StrToUnicodeStr((unsigned char*)p_sBuffer, ucStr, nLen);
|
|
LOGI("%ws\n", (wchar_t*)ucStr);
|
|
delete[] ucStr;
|
|
ucStr = NULL;
|
|
}
|
|
void LayaAlert(const char* p_sBuffer)
|
|
{
|
|
#ifdef WIN32
|
|
int nLen = strlen(p_sBuffer) + 3;
|
|
unsigned short* ucStr = new unsigned short[nLen];
|
|
int nlen = UTF8StrToUnicodeStr((unsigned char*)p_sBuffer, ucStr, nLen);
|
|
delete[] ucStr;
|
|
ucStr = NULL;
|
|
std::wstring wsBuffer = (wchar_t*)utf8_unicode(p_sBuffer).c_str();
|
|
MessageBoxW(NULL, wsBuffer.c_str(), L"alert", MB_OK);
|
|
#elif ANDROID
|
|
std::string strBuffer = p_sBuffer;
|
|
CToJavaBridge::JavaRet kRet;
|
|
CToJavaBridge::GetInstance()->callMethod(CToJavaBridge::JavaClass.c_str(), "alert", strBuffer.c_str(), kRet);
|
|
#elif __APPLE__
|
|
CToObjectCAlert(p_sBuffer);
|
|
#endif
|
|
}
|
|
void JSAlert(const char* p_sBuffer)
|
|
{
|
|
LayaAlert(p_sBuffer);
|
|
#ifndef WIN32
|
|
LOGI("alert=%s", p_sBuffer);
|
|
#endif
|
|
}
|
|
int getInnerWidth()
|
|
{
|
|
return g_nInnerWidth;
|
|
}
|
|
int getInnerHeight()
|
|
{
|
|
return g_nInnerHeight;
|
|
}
|
|
int getDevicePixelRatio()
|
|
{
|
|
#ifdef WIN32
|
|
return 1.0;
|
|
#elif ANDROID
|
|
return 1.0;
|
|
#elif __APPLE__
|
|
return 1.0;// CToObjectCGetDevicePixelRatio();
|
|
#endif
|
|
}
|
|
JsValue getExePath()
|
|
{
|
|
#ifdef WIN32
|
|
TCHAR szPath[MAX_PATH];
|
|
::GetModuleFileName(NULL, szPath, MAX_PATH);
|
|
::GetFullPathName(szPath, MAX_PATH, szPath, NULL);
|
|
g_sExePath = szPath;
|
|
return JSP_TO_JS(const char*, g_sExePath.c_str());
|
|
#elif __APPLE__
|
|
return JSP_TO_JS_NULL;
|
|
#else
|
|
return JSP_TO_JS_NULL;
|
|
#endif
|
|
}
|
|
void PerfAddData(int nID, int nColor, float fScale, float fAlert )
|
|
{
|
|
if (g_kSystemConfig.m_nThreadMODE == THREAD_MODE_DOUBLE)
|
|
{
|
|
JCScriptRuntime::s_JSRT->flushSharedCmdBuffer();
|
|
JCCommandEncoderBuffer* pCmd = JCScriptRuntime::s_JSRT->m_pRenderCmd;
|
|
pCmd->append(LAYA_PERFADDDATA);
|
|
pCmd->append(nID);
|
|
pCmd->append(nColor);
|
|
pCmd->append(fScale);
|
|
pCmd->append(fAlert);
|
|
}
|
|
else
|
|
{
|
|
JCPerfHUD::addData(nID, nColor, fScale, fAlert);
|
|
}
|
|
}
|
|
void PerfUpdateDt(int nID, float nSpace)
|
|
{
|
|
if (g_kSystemConfig.m_nThreadMODE == THREAD_MODE_DOUBLE)
|
|
{
|
|
JCScriptRuntime::s_JSRT->flushSharedCmdBuffer();
|
|
JCCommandEncoderBuffer* pCmd = JCScriptRuntime::s_JSRT->m_pRenderCmd;
|
|
pCmd->append(LAYA_PERFUPDATEDT);
|
|
pCmd->append(nID);
|
|
pCmd->append(nSpace);
|
|
}
|
|
else
|
|
{
|
|
JCPerfHUD::updateData(nID, nSpace);
|
|
}
|
|
}
|
|
void PerfShow(float f)
|
|
{
|
|
JCPerfHUD::m_fGlobalScale = f;
|
|
JCPerfHUD::init();
|
|
JCConch::s_pConchRender->m_fShowPerfScale = f;
|
|
}
|
|
void writeStrFileSync(const char* p_pszFile, const char* p_pString )
|
|
{
|
|
JCBuffer buf((char*)p_pString, strlen(p_pString), false, false);
|
|
writeFileSync(p_pszFile, buf, JCBuffer::utf8);
|
|
}
|
|
void reloadCurJSThread()
|
|
{
|
|
#ifdef __APPLE__
|
|
CToObjectCRunStopJSLoop();
|
|
#endif
|
|
if (JCConch::s_pConch)
|
|
{
|
|
JCConch::s_pConch->postCmdToMainThread(JCConch::CMD_ReloadProcess, 0, 0);
|
|
}
|
|
}
|
|
std::string readTextAsset(const char* p_pszFile)
|
|
{
|
|
char* sBuffer = NULL;
|
|
int nSize = 0;
|
|
if (JCConch::s_pAssetsFiles->loadFileContent(p_pszFile, sBuffer, nSize))
|
|
{
|
|
std::string rsBuffer = sBuffer;
|
|
delete[] sBuffer;
|
|
return rsBuffer;
|
|
}
|
|
return "";
|
|
}
|
|
bool gbAlertException = true;
|
|
void showAlertOnJsException(bool show)
|
|
{
|
|
gbAlertException = show;
|
|
}
|
|
std::string calcMD5(unsigned char* buf, int len)
|
|
{
|
|
JCMD5 imd5;
|
|
imd5.GenerateMD5(buf, len);
|
|
return imd5.ToString();
|
|
}
|
|
std::string calcMD5_JSAB(JSValueAsParam pjs)
|
|
{
|
|
char* pABPtr = NULL;
|
|
int nABLen = 0;
|
|
if (!extractJSAB(pjs, pABPtr, nABLen))return "";
|
|
std::string ret = calcMD5((unsigned char*)pABPtr, nABLen);
|
|
return ret;
|
|
}
|
|
static std::string toBase64(const char* type, float encoderOptions, JSValueAsParam ab, int w, int h, bool flipY)
|
|
{
|
|
char* pPixels = NULL;
|
|
int nABLen = 0;
|
|
bool bIsArrayBuffer = extractJSAB(ab, pPixels, nABLen);
|
|
int size = sizeof(GLubyte) * w * h * 4;
|
|
if (!bIsArrayBuffer || w == 0 || h == 0 || size != nABLen)
|
|
{
|
|
const char* pstrHeader = "data:";
|
|
int length = strlen(pstrHeader);
|
|
std::unique_ptr<char[]> pDest(new char[length + 1]);
|
|
memcpy(pDest.get(), pstrHeader, length);
|
|
pDest.get()[length] = '\0';
|
|
return string(pDest.get());
|
|
}
|
|
|
|
if (flipY)
|
|
{
|
|
laya::flipPixelsY((uint8_t*)pPixels, w * 4, h);
|
|
}
|
|
|
|
string strType(type);
|
|
int length = (size + 2) / 3 * 4;
|
|
std::unique_ptr<char[]> pDest(new char[length]);
|
|
memset(pDest.get(), 0, length);
|
|
char *pCurrent = pDest.get();
|
|
std::pair<unsigned char*, unsigned long> result;
|
|
if (strType == "image/jpeg")
|
|
{
|
|
const char* pstrHeader = "data:image/jpeg;base64,";
|
|
int length = strlen(pstrHeader);
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
*pCurrent = pstrHeader[i];
|
|
pCurrent++;
|
|
}
|
|
result = convertBitmapToJpeg((const char*)pPixels, w, h, 32);
|
|
}
|
|
else
|
|
{
|
|
const char* pstrHeader = "data:image/png;base64,";
|
|
int length = strlen(pstrHeader);
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
*pCurrent = pstrHeader[i];
|
|
pCurrent++;
|
|
}
|
|
result = laya::convertBitmapToPng((const char*)pPixels, w, h, 8);
|
|
}
|
|
|
|
base64Encode(pCurrent, (const char*)result.first, result.second);
|
|
delete[] result.first;
|
|
return string(pDest.get());
|
|
}
|
|
std::string conchToBase64FlipY(const char* type, float encoderOptions, JSValueAsParam ab, int w, int h)
|
|
{
|
|
return toBase64(type, encoderOptions, ab, w, h, true);
|
|
}
|
|
std::string conchToBase64(const char* type, float encoderOptions, JSValueAsParam ab, int w, int h)
|
|
{
|
|
return toBase64(type, encoderOptions, ab, w, h, false);
|
|
}
|
|
|
|
void JSGlobalExportC()
|
|
{
|
|
JSP_GLOBAL_START1();
|
|
JSRuntime* pJSRuntime = new JSRuntime();
|
|
pJSRuntime->exportJS();
|
|
JSHistory* pJsHistory = new JSHistory();
|
|
pJsHistory->exportJS();
|
|
JSConsole::exportJS();
|
|
JSImage::exportJS();
|
|
XMLHttpRequest::exportJS();
|
|
JSConchConfig::getInstance()->exportJS();
|
|
JSXmlDocument::exportJS();
|
|
JSXmlNode::exportJS();
|
|
JSXmlAttr::exportJS();
|
|
JSDOMParser::exportJS();
|
|
JSAudio::exportJS();
|
|
JsAppCache::exportJS();
|
|
JSWebSocket::exportJS();
|
|
JSZip::exportJS();
|
|
JSNotify::exportJS();
|
|
if (JSLayaGL::s_pLayaGL != NULL)
|
|
{
|
|
delete JSLayaGL::s_pLayaGL;
|
|
JSLayaGL::s_pLayaGL = NULL;
|
|
}
|
|
JSLayaGL::getInstance()->exportJS();
|
|
JSShaderActiveInfo::exportJS();
|
|
JSShaderPrecisionFormat::exportJS();
|
|
#ifdef WIN32
|
|
JSWindowEditBox::exportJS();
|
|
#elif ANDROID
|
|
JSAndroidEditBox::exportJS();
|
|
#elif __APPLE__
|
|
JSIOSEditBox::exportJS();
|
|
#endif
|
|
//JSTextCanvas
|
|
JSTextBitmapInfo::exportJS();
|
|
if (JSTextMemoryCanvas::ms_pTextMemoryCanvas != NULL)
|
|
{
|
|
delete JSTextMemoryCanvas::ms_pTextMemoryCanvas;
|
|
JSTextMemoryCanvas::ms_pTextMemoryCanvas = NULL;
|
|
}
|
|
JSTextMemoryCanvas::getInstance()->exportJS();
|
|
JSCallbackFuncObj::exportJS();
|
|
|
|
#ifdef __APPLE__
|
|
JSContextRef ctx = laya::__TlsData::GetInstance()->GetCurContext();
|
|
JCWebGLPlus::getInstance()->exportJS((void*)ctx, JSContextGetGlobalObject(ctx));
|
|
#else
|
|
v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
|
v8::Local<v8::Context> context = isolate->GetCurrentContext();
|
|
//v8::Local<v8::Object> object = v8::Object::New(isolate);
|
|
//context->Global()->Set(v8::String::NewFromUtf8(isolate, "qq"), object);
|
|
v8::Local<v8::Object> object = context->Global();
|
|
JCWebGLPlus::getInstance()->exportJS((void*)NULL, &object);
|
|
#endif
|
|
JSVideo::exportJS();
|
|
|
|
//以下是全局函数
|
|
//------------------------------------------------------------------------------
|
|
JSP_ADD_GLOBAL_FUNCTION(setTouchEvtFunction, setTouchEvtFunc, JSValueAsParam);
|
|
JSP_ADD_GLOBAL_FUNCTION(setKeyEvtFunction, setKeyEvtFunc, JSValueAsParam);
|
|
JSP_ADD_GLOBAL_FUNCTION(setJoystickEvtFunction, setJoystickEvtFunc, JSValueAsParam);
|
|
JSP_ADD_GLOBAL_FUNCTION(tmGetCurms, tmGetCurms);
|
|
JSP_ADD_GLOBAL_FUNCTION(reloadJS, reloadCurJSThread);
|
|
JSP_ADD_GLOBAL_FUNCTION(getExePath, getExePath);
|
|
JSP_ADD_GLOBAL_FUNCTION(getInnerHeight, getInnerHeight);
|
|
JSP_ADD_GLOBAL_FUNCTION(getInnerWidth, getInnerWidth);
|
|
JSP_ADD_GLOBAL_FUNCTION(getDevicePixelRatio, getDevicePixelRatio);
|
|
JSP_ADD_GLOBAL_PROPERTY(enableTouch, g_bEnableTouch);
|
|
JSP_ADD_GLOBAL_FUNCTION(alert, JSAlert, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(print, JSPrint, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(evalJS, evalJS, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(PerfShow, PerfShow, int);
|
|
JSP_ADD_GLOBAL_FUNCTION(PerfAddData, PerfAddData, int,int,float,float);
|
|
JSP_ADD_GLOBAL_FUNCTION(PerfUpdateDt, PerfUpdateDt, int,float);
|
|
JSP_ADD_GLOBAL_FUNCTION(readFileSync, readFileSync1, const char*, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(writeStrFileSync, writeStrFileSync, const char*, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(readTextAsset, readTextAsset, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_exists, JSFileSystem::exists, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_mkdir, JSFileSystem::mkdir, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_rm, JSFileSystem::rm, const char*);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_rmDir, JSFileSystem::rmDir);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_rmDirSync, JSFileSystem::rmDirSync);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_readdirSync, JSFileSystem::readdirSync);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_lstatSync, JSFileSystem::lstatSync);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_writeFileSync, JSFileSystem::JSWriteFileSync);
|
|
JSP_ADD_GLOBAL_FUNCTION(decodeTemp, UrlDecode);//以后实现各和JS一样的这个就可以删了
|
|
JSP_ADD_GLOBAL_FUNCTION(showAlertOnJsException, showAlertOnJsException,bool);
|
|
JSP_ADD_GLOBAL_FUNCTION(fs_readFileSync, JSFileSystem::readBinFileSync, const char*);//这个返回的是ArrayBuffer接口
|
|
JSP_ADD_GLOBAL_FUNCTION(downloadBigFile, _downloadBigFile);
|
|
JSP_ADD_GLOBAL_FUNCTION(downloadGetHeader, _downloadGetHeader);
|
|
JSP_ADD_GLOBAL_FUNCTION(calcmd5, calcMD5_JSAB);
|
|
JSP_ADD_GLOBAL_FUNCTION(conchToBase64, conchToBase64);
|
|
JSP_ADD_GLOBAL_FUNCTION(conchToBase64FlipY, conchToBase64FlipY);
|
|
|
|
ExportJS_bullet();
|
|
JSLayaConchBullet::exportJS();
|
|
}
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
//-----------------------------END FILE--------------------------------
|