Common.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. import DataModelManager from '../framework/DataModelManager';
  2. import Define from './Define'
  3. var Int64BE = require("int64-buffer").Int64BE;
  4. var Uint64BE = require("int64-buffer").Uint64BE;
  5. var Int64LE = require("int64-buffer").Int64LE;
  6. var UInt64LE = require("int64-buffer").UInt64LE;
  7. let Common = {
  8. 'appid':'wxbf82ebb4482641b9',
  9. 'appsecret':'184b026f981eb4d3c41f1c7a7607bc82',
  10. 'androidappid':'wx68f7188d6939904f',
  11. 'androidappsecret':'e4b7999d0db89df4d5caf5af57f048ef',
  12. 'wxWindowWidth':1334,
  13. 'wxwindowHeight':750,
  14. 'littleEndian':(function() {
  15. var buffer = new ArrayBuffer(2);
  16. new DataView(buffer).setInt16(0, 256, true);
  17. return new Int16Array(buffer)[0] === 256;
  18. })(),
  19. 'Trim':function(str,is_global)
  20. {
  21. var result;
  22. result = str.replace(/(^\s+)|(\s+$)/g,"");
  23. if(is_global.toLowerCase()=="g")
  24. {
  25. result = result.replace(/\s/g,"");
  26. }
  27. return result;
  28. },
  29. 'sendGetGameConfig': function(url, callBack) {
  30. cc.log('Common sendGetGameConfig url:' + url);
  31. var request = cc.loader.getXMLHttpRequest();
  32. // request.responseType = 'arraybuffer';
  33. request.timeout = 120000; // 超时时间,单位是毫秒
  34. request.open("GET", url, true);
  35. request.ontimeout = function (e) {
  36. // XMLHttpRequest 超时。在此做某事。
  37. cc.log('sendGetGameConfig:ontimeout url: ' + url );
  38. callBack('timeOut', null);
  39. };
  40. request.onreadystatechange = function () {
  41. if (request.readyState == 4) {
  42. if (request.status >= 200 && request.status < 400) {
  43. if (request.response && callBack) {
  44. var uint8Array = new Uint8Array(request.response);
  45. var str = Common.Uint8ArrayToString(uint8Array)
  46. callBack(null, request.response);
  47. }
  48. } else {
  49. callBack(request.status, '');
  50. }
  51. }
  52. };
  53. request.send();
  54. },
  55. 'createImage':function(sprite,url){
  56. console.log("createImage: url:" + url );
  57. let self = this;
  58. let image = new Image();
  59. image.onload = function ()
  60. {
  61. let texture = new cc.Texture2D();
  62. texture.initWithElement(image);
  63. texture.handleLoadedTexture();
  64. sprite.spriteFrame = new cc.SpriteFrame(texture);
  65. console.log('createImage onload' );
  66. };
  67. image.src = url;
  68. },
  69. 'cardValue2SpStr':function(cardData)
  70. {
  71. var index = 0;
  72. if (0 != cardData) {
  73. var nColor = Math.floor(cardData / 16);
  74. var nValue = (cardData % 16);
  75. cc.log('cardData:' + cardData + ' nColor:' + nColor + ' nValue:' + nValue);
  76. if (nColor == 4) {
  77. index = (Math.floor(cardData / 16) - 1) * 13 + (cardData % 16) ;
  78. } else {
  79. index = Math.floor(cardData / 16) * 13 + (cardData % 16) ;
  80. }
  81. } else {
  82. //使用背面纹理区域
  83. index = 55;
  84. }
  85. return index
  86. },
  87. 'RankType':
  88. {
  89. CityRank:0,
  90. ProvinceRank:1,
  91. CountryRank:2,
  92. },
  93. 'TCPInfoSize':4,
  94. 'DK_MAPPED':0x1,
  95. 'ReConnect':
  96. {
  97. RECONNECT_INTERVAL:5,
  98. RECONNECT_TIME : 10,
  99. },
  100. 'SceneType':
  101. {
  102. Lobby:1,
  103. Battle:2,
  104. },
  105. 'MatchType':
  106. {
  107. Random:0,//随机匹配
  108. WeekOne:1,//智力周赛单人
  109. WeekTwo:2,//智力周赛双人
  110. FriendPK:3,//好友PK
  111. },
  112. 'HonorType':
  113. {
  114. WithoutHonor:0, //没有荣誉
  115. JuniorHonor:1, //初级荣誉
  116. MiddleHonor:2, //中级荣誉
  117. AdvancedHonor:3, //进阶荣誉
  118. HighHonor:4, //高级荣誉
  119. },
  120. 'Honor':
  121. {
  122. WithoutHonor:'', //没有荣誉
  123. JuniorHonor:'聪慧青铜', //初级荣誉
  124. MiddleHonor:'博学白银', //中级荣誉
  125. AdvancedHonor:'万卷宗师', //进阶荣誉
  126. HighHonor:'最强大脑', //高级荣誉
  127. },
  128. 'GameState' :
  129. {
  130. SocketConnecting: 1, // socket connect
  131. Matching: 2, // Matching
  132. Gaming: 3, // Gaming
  133. Result: 4, // Result
  134. },
  135. 'SocketState' :
  136. {
  137. OK : 0,//可用
  138. Connecting : 1,//正在连接
  139. Closing : 2,//连接正在关闭
  140. Closed : 3,//关闭或出错
  141. ReConnecting:4,//重连中
  142. ConnectFail:5,//重连失败
  143. DisConnect:6,//断开连接
  144. Error:7,//错误
  145. },
  146. 'BGMState' :
  147. {
  148. NONE: 0,
  149. MAINMENU: 1,
  150. NORMAL: 2,
  151. NORMAL1: 3,
  152. EXCITING: 4,
  153. },
  154. 'BGMUrl': {
  155. MAINMENU: Define.Prefix +'sounds/BGM/BG_Welcome',
  156. NORMAL: Define.Prefix +'sounds/BGM/BG_Normal',
  157. NORMAL1: Define.Prefix +'sounds/BGM/BG_Normal1',
  158. EXCITING: Define.Prefix +'sounds/BGM/BG_Exciting',
  159. },
  160. 'EffectUrl' :
  161. {
  162. ClickButton : Define.Prefix +'sounds/SFX/2',
  163. ClickButtonFail : Define.Prefix +'sounds/SFX/3',
  164. DecreaseStrength : Define.Prefix +'sounds/SFX/4',
  165. Success : Define.Prefix +'sounds/SFX/7',
  166. Error : Define.Prefix +'sounds/SFX/8',
  167. ReadyGo : Define.Prefix +'sounds/SFX/9-1',
  168. CountDown : Define.Prefix + 'sounds/SFX/10',
  169. CountDownDeadTime : Define.Prefix +'sounds/SFX/11',
  170. Right_1 : Define.Prefix +'sounds/SFX/12-1',
  171. Right_2 :Define.Prefix + 'sounds/SFX/Y-1',
  172. Double : Define.Prefix +'sounds/SFX/12-2',
  173. Wrong : Define.Prefix +'sounds/SFX/13',
  174. DoubleKill_1 :Define.Prefix + 'sounds/SFX/14-1',
  175. DoubleKill_2 : Define.Prefix +'sounds/SFX/Y-2',
  176. TripleKill_1 : Define.Prefix +'sounds/SFX/14-2',
  177. TripleKill_2 : Define.Prefix +'sounds/SFX/Y-3',
  178. QuataryKill_1 :Define.Prefix + 'sounds/SFX/14-3',
  179. QuataryKill_2 : Define.Prefix +'sounds/SFX/Y-4',
  180. WrongAgain_1 : Define.Prefix +'sounds/SFX/15',
  181. WrongAgain_2 :Define.Prefix + 'sounds/SFX/N-2',
  182. IncreaseScore : Define.Prefix +'sounds/SFX/18',
  183. DoubleScore :Define.Prefix + 'sounds/SFX/20',
  184. Win : Define.Prefix +'sounds/SFX/21-1',
  185. Tie : Define.Prefix +'sounds/SFX/21-2',
  186. Lose :Define.Prefix + 'sounds/SFX/21-3',
  187. ResultScore : Define.Prefix +'sounds/SFX/22',
  188. PopWindow : Define.Prefix +'sounds/SFX/23',
  189. Honor : Define.Prefix +'sounds/SFX/25',
  190. Round : Define.Prefix +'sounds/SFX/28',
  191. EnemyRight :Define.Prefix + 'sounds/SFX/29',
  192. EnemyWrong : Define.Prefix +'sounds/SFX/30',
  193. EnemyIncreaseScore :Define.Prefix + 'sounds/SFX/31',
  194. TimeOut : Define.Prefix +'sounds/SFX/32',
  195. Result : Define.Prefix +'sounds/SFX/33',
  196. },
  197. 'AddressCheck':function(province,city)
  198. {
  199. if(province== undefined || city == undefined)
  200. {
  201. return '来自:未知';
  202. }
  203. if(province.length<=0&&city.length<=0)
  204. {
  205. return '来自:未知';
  206. }
  207. return '来自:' + province + city;
  208. },
  209. 'ClampLength':function(tstr)
  210. {
  211. if(tstr==null)
  212. {
  213. return 0;
  214. }
  215. var len = 0;
  216. var pattern = new RegExp("[\u4E00-\u9FA5]");
  217. var pattern2 = new RegExp("[A-Za-z0-9]+");
  218. var pattern2Len = 0.5;
  219. for (var i = 0; i < tstr.length; ++i)
  220. {
  221. if (pattern.test(tstr[i]))
  222. {
  223. len += 1;
  224. }
  225. else
  226. {
  227. len += 0.5;
  228. }
  229. }
  230. return len;
  231. },
  232. 'ClampName':function(name)
  233. {
  234. // var pattern = new RegExp("[\u4E00-\u9FA5]");
  235. // var str = '中文字符'
  236. // if (pattern.test(str))
  237. // {
  238. // alert('chinese');
  239. // }
  240. // var pattern2 = new RegExp("[A-Za-z]+");
  241. // var str2 = 'abcdefg';
  242. // if (pattern2.test(str2))
  243. // {
  244. // alert('english')
  245. // }
  246. // var pattern3 = new RegExp("[0-9]+");
  247. // var str3 = 'abcdefg';
  248. // if (pattern3.test(str2))
  249. // {
  250. // alert('number')
  251. // }
  252. // var len = name.length;
  253. // if (len > 5)
  254. // {
  255. // return name.slice(0, 4) + '...';
  256. // }
  257. if (name.length <= 5)
  258. {
  259. return name;
  260. }
  261. var len = 0;
  262. var str = '';
  263. var totalLen = 5;
  264. var post = '...';
  265. var pattern = new RegExp("[\u4E00-\u9FA5]");
  266. var patternLen = 1;
  267. var pattern2 = new RegExp("[A-Za-z0-9]+");
  268. var pattern2Len = 0.5;
  269. for (var i = 0; i < name.length; ++i)
  270. {
  271. if (pattern.test(name[i]))
  272. {
  273. if (len + 1 <= totalLen - 1.5)
  274. {
  275. str += name[i];
  276. len += 1;
  277. }
  278. else
  279. {
  280. break;
  281. }
  282. }
  283. else if (pattern2.test(name[i]))
  284. {
  285. if (len + 0.5 <= totalLen - 1.5)
  286. {
  287. str += name[i];
  288. len += 0.5;
  289. }
  290. else
  291. {
  292. break;
  293. }
  294. }
  295. }
  296. return str+post;
  297. },
  298. 'AdjustFit':function(node)
  299. {
  300. if(node==null)
  301. {
  302. return 0;
  303. }
  304. var windowWidth = 0 ;
  305. var scale = 1;
  306. if (CC_WECHATGAME)
  307. {
  308. wx.getSystemInfo({
  309. success: function(res) {
  310. // console.log(res.model)
  311. // console.log(res.pixelRatio)
  312. // console.log(res.windowWidth)
  313. windowWidth = res.windowWidth;
  314. // console.log(res.windowHeight)
  315. // console.log(res.screenWidth)
  316. // console.log(res.screenHeight)
  317. // console.log(res.language)
  318. // console.log(res.version)
  319. // console.log(res.platform)
  320. }
  321. });
  322. if(windowWidth - 360 > 0)
  323. {
  324. scale = 1 - (windowWidth - 360)/360;
  325. node.scale = scale;
  326. }
  327. if(windowWidth - 360 < 0)
  328. {
  329. scale = 1 + (360 - windowWidth )/360;
  330. node.scale = scale;
  331. }
  332. }
  333. },
  334. 'GetDateString':function()
  335. {
  336. var d = new Date();
  337. var timeStr = "";
  338. var str = d.getMonth();
  339. var str = d.getDate();
  340. timeStr += str + ":";
  341. str = d.getHours();
  342. timeStr += (str.length == 1 ? "0" + str : str) + ":";
  343. str = d.getMinutes();
  344. timeStr += (str.length == 1 ? "0" + str : str) + ":";
  345. str = d.getSeconds();
  346. timeStr += str.length == 1 ? "0" + str : str;
  347. timeStr += ":";
  348. str = d.getMilliseconds()
  349. timeStr += str;
  350. timeStr = "[" + timeStr + "]";
  351. return timeStr;
  352. },
  353. 'InspectPrint':function(pre,data)
  354. {
  355. var util = require("util")
  356. var timeStr = this.GetDateString();
  357. if(data==undefined)
  358. {
  359. console.log(timeStr + " " + util.inspect(pre,{depth:null})); //depth:null 展开全部层级
  360. }
  361. else
  362. {
  363. console.log(timeStr + " " + pre + util.inspect(data,{depth:null})); //depth:null 展开全部层级
  364. }
  365. },
  366. 'Print':function(str)
  367. {
  368. var timeStr = this.GetDateString();
  369. console.log(timeStr + " " + str );
  370. },
  371. 'H5SDKReport':function (r_type,card_ID,slot_ID,order_ID,iAction_Id,ext)
  372. {
  373. // if(CC_WECHATGAME)
  374. // {
  375. // H5SDK.report(r_type, {
  376. // vRoleID: DataModelManager.getModel('PlayerInfoModel').selfRoleId,
  377. // cardID: card_ID,
  378. // slotID: slot_ID,
  379. // orderID: order_ID,
  380. // iActionId: iAction_Id,
  381. // extend: ext
  382. // });
  383. // }
  384. },
  385. 'Uint8ArrayToString':function (fileData){
  386. var dataString = "";
  387. for (var i = 0; i < fileData.length; i++) {
  388. dataString += String.fromCharCode(fileData[i]);
  389. }
  390. return dataString
  391. },
  392. 'stringToUint8Array':function (str){
  393. var arr = [];
  394. for (var i = 0, j = str.length; i < j; ++i) {
  395. arr.push(str.charCodeAt(i));
  396. }
  397. var tmpUint8Array = new Uint8Array(arr);
  398. return tmpUint8Array
  399. },
  400. 'str2ab':function (str) {
  401. var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
  402. var bufView = new Uint16Array(buf);
  403. for (var i = 0, strLen = str.length; i < strLen; i++) {
  404. bufView[i] = str.charCodeAt(i);
  405. }
  406. return buf;
  407. },
  408. 'utf16ToUtf8' : function (s) {
  409. if(!s){
  410. return;
  411. }
  412. var i, code, ret = [], len = s.length;
  413. for(i = 0; i < len; i++){
  414. code = s.charCodeAt(i);
  415. if(code > 0x0 && code <= 0x7f){
  416. //单字节
  417. //UTF-16 0000 - 007F
  418. //UTF-8 0xxxxxxx
  419. ret.push(s.charAt(i));
  420. }else if(code >= 0x80 && code <= 0x7ff){
  421. //双字节
  422. //UTF-16 0080 - 07FF
  423. //UTF-8 110xxxxx 10xxxxxx
  424. ret.push(
  425. //110xxxxx
  426. String.fromCharCode(0xc0 | ((code >> 6) & 0x1f)),
  427. //10xxxxxx
  428. String.fromCharCode(0x80 | (code & 0x3f))
  429. );
  430. }else if(code >= 0x800 && code <= 0xffff){
  431. //三字节
  432. //UTF-16 0800 - FFFF
  433. //UTF-8 1110xxxx 10xxxxxx 10xxxxxx
  434. ret.push(
  435. //1110xxxx
  436. String.fromCharCode(0xe0 | ((code >> 12) & 0xf)),
  437. //10xxxxxx
  438. String.fromCharCode(0x80 | ((code >> 6) & 0x3f)),
  439. //10xxxxxx
  440. String.fromCharCode(0x80 | (code & 0x3f))
  441. );
  442. }
  443. }
  444. return ret.join('');
  445. },
  446. 'utf8ToUtf16':function (s) {
  447. if(!s){
  448. return;
  449. }
  450. var i, codes, bytes, ret = [], len = s.length;
  451. for(i = 0; i < len; i++){
  452. codes = [];
  453. codes.push(s.charCodeAt(i));
  454. if(((codes[0] >> 7) & 0xff) == 0x0){
  455. //单字节 0xxxxxxx
  456. ret.push(s.charAt(i));
  457. }else if(((codes[0] >> 5) & 0xff) == 0x6){
  458. //双字节 110xxxxx 10xxxxxx
  459. codes.push(s.charCodeAt(++i));
  460. bytes = [];
  461. bytes.push(codes[0] & 0x1f);
  462. bytes.push(codes[1] & 0x3f);
  463. ret.push(String.fromCharCode((bytes[0] << 6) | bytes[1]));
  464. }else if(((codes[0] >> 4) & 0xff) == 0xe){
  465. //三字节 1110xxxx 10xxxxxx 10xxxxxx
  466. codes.push(s.charCodeAt(++i));
  467. codes.push(s.charCodeAt(++i));
  468. bytes = [];
  469. bytes.push((codes[0] << 4) | ((codes[1] >> 2) & 0xf));
  470. bytes.push(((codes[1] & 0x3) << 6) | (codes[2] & 0x3f));
  471. ret.push(String.fromCharCode((bytes[0] << 8) | bytes[1]));
  472. }
  473. }
  474. return ret.join('');
  475. },
  476. 'delRight': function(buf) {
  477. var u16array = new Uint16Array(buf);
  478. if((u16array[u16array.length-1])!=0)
  479. {
  480. return u16array
  481. }
  482. for (var i = u16array.length - 1; i >= 0; i--) {
  483. if (u16array[i] != 0) {
  484. var arr1 = u16array.slice(0, i + 1);
  485. return arr1;
  486. }
  487. }
  488. return null;
  489. },
  490. 'ab2str':function(buf) {
  491. var arr = Common.delRight(buf);
  492. if (!arr) {
  493. return '';
  494. } else {
  495. var decodedString = String.fromCharCode.apply(null, arr);
  496. // console.log("ab2str:" + decodedString);
  497. return decodedString;
  498. }
  499. },
  500. 'version':function(p,m,s,b){
  501. var v = 0
  502. if (p != null)
  503. v = v | (p<<24)
  504. if (m != null)
  505. v = v | (m<<16)
  506. if (s != null)
  507. v = v | (s<<8)
  508. if (b != null)
  509. v = v | b
  510. return v
  511. },
  512. 'putString':function(index,viewData,str,length)
  513. {
  514. var len = length
  515. var strLen = str.length
  516. if(len==undefined||len==null)
  517. {
  518. len = str.length
  519. }
  520. for (var i = 0; i < len; i++)
  521. {
  522. if(i<strLen)
  523. {
  524. viewData.setUint16(index,str.charCodeAt(i),Common.littleEndian);
  525. }
  526. index += 2
  527. }
  528. return index
  529. },
  530. 'getString':function(buf,readPos,size)
  531. {
  532. var arraybuffer = buf.slice(readPos, readPos + size)
  533. return Common.ab2str(arraybuffer)
  534. },
  535. 'readint64BE':function(buf,readPos)
  536. {
  537. var arraybuffer = buf.slice(readPos, readPos + 8)
  538. var big = new Int64BE(arraybuffer);
  539. return big.toNumber()
  540. },
  541. 'readint64LE':function(buf,readPos)
  542. {
  543. var arraybuffer = buf.slice(readPos, readPos + 8)
  544. var big = new Int64LE(arraybuffer);
  545. return big.toNumber()
  546. },
  547. 'readint64':function(buf,readPos)
  548. {
  549. if(Common.littleEndian)
  550. {
  551. return Common.readint64LE(buf,readPos)
  552. }
  553. else
  554. {
  555. return Common.readint64BE(buf,readPos)
  556. }
  557. },
  558. '_loadImage':function(url, callback){
  559. cc.loader.load({url: url, type: "jpeg"}, (err, tex)=>{
  560. if (err){
  561. cc.error(err);
  562. } else {
  563. callback(tex);
  564. }
  565. });
  566. },
  567. 'loadImage':function(url, callback){
  568. // Web平台直接加载
  569. if (!cc.sys.isNative){
  570. this._loadImage(url, callback);
  571. return;
  572. }
  573. let dirpath = jsb.fileUtils.getWritablePath() + "TclGameImg/";
  574. cc.log("dirpath: " + dirpath);
  575. // let md5 = require("./encrypt/Md5");
  576. // let md5Url = md5.md5_hex(url);
  577. var tempIndex = url.lastIndexOf("\/");
  578. var fileName = url.substring(tempIndex + 1);
  579. let filePath = dirpath + fileName
  580. cc.log("filepath: " + filePath);
  581. function loadEnd() {
  582. cc.loader.load(filePath, (err, tex)=>{
  583. if (err){
  584. cc.error(err);
  585. } else {
  586. callback(tex);
  587. }
  588. });
  589. }
  590. if (jsb.fileUtils.isFileExist(filePath)){
  591. cc.log("Remote img is find: " + filePath);
  592. loadEnd();
  593. return;
  594. }
  595. let saveFile = function (data) {
  596. if (data && typeof data !== "undefined"){
  597. if (!jsb.fileUtils.isDirectoryExist(dirpath)){
  598. jsb.fileUtils.createDirectory(dirpath);
  599. } else {
  600. cc.log("路径 " + dirpath + "已经存在。");
  601. }
  602. if(jsb.fileUtils.writeDataToFile(new Uint8Array(data), filePath)){
  603. cc.log("Remote img save succeed.");
  604. loadEnd();
  605. }else {
  606. cc.log("Remote img save failed.");
  607. }
  608. } else {
  609. cc.log("Remote img download failed.");
  610. }
  611. };
  612. let xhr = cc.loader.getXMLHttpRequest();
  613. xhr.onreadystatechange = function () {
  614. cc.log("xhr.readyState: " + xhr.readyState);
  615. cc.log("xhr.status: " + xhr.status);
  616. if (xhr.readyState === 4){
  617. if (xhr.status === 200){
  618. saveFile(xhr.response);
  619. } else {
  620. saveFile(null);
  621. }
  622. }
  623. }.bind(this);
  624. xhr.responseType = 'arraybuffer';
  625. xhr.open('GET', url, true);
  626. xhr.send();
  627. },
  628. };
  629. export default Common;