dm.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /**
  2. * DM.js
  3. * C.C. <fanweixiao@gmail.com>
  4. */
  5. __jlog_disabled = true;
  6. $('#dm').remove();
  7. // $('#dm-switch').remove();
  8. function start_sio(entity, entity_id, dm_mgr, cb){
  9. console.log('-->');
  10. delete localStorage.debug;
  11. //localStorage.debug='*,-engine.io*';
  12. var opts = {
  13. reconnection: true,
  14. reconnectionAttempts: 5,
  15. reconnectionDelay: 5000,
  16. reconnectionDelayMax: 10000,
  17. //transports: ['websocket', 'polling'],
  18. query: 'entity_id=' + article_id + '&entity=' + entity
  19. };
  20. var socket = io.connect('ws://dm3.jiecao.fm/art', opts);
  21. window.__socket = socket;
  22. socket.on('status', function(data){
  23. jlog(data);
  24. dm_mgr.push(data);
  25. });
  26. socket.on('disconnect', function(){
  27. jlog('==> socket.io disconnect');
  28. });
  29. socket.on('connect', function(){
  30. console.log('==> socket.io connected');
  31. });
  32. socket.on('error', function(err){
  33. jlog('[EE] socket.io error: ' + err);
  34. });
  35. if(typeof(cb) !== 'undefined'){
  36. cb(socket);
  37. }
  38. }
  39. function start(entity, entity_id, list_url){
  40. // Get querystring from url
  41. function getParameterByName(name) {
  42. name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
  43. var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
  44. results = regex.exec(location.search);
  45. return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
  46. }
  47. // Get article_id
  48. /* var article_id = getParameterByName('id');
  49. if(typeof(art_id) != 'undefined'){
  50. article_id = art_id
  51. }
  52. if(!article_id){
  53. jlog('can not find article id, set art_id=`public_room`');
  54. article_id = 'public_room';
  55. }
  56. jlog('art_id=' + article_id);*/
  57. var opt = {
  58. entity: entity,
  59. entity_id : entity_id,
  60. danmu_list_url : list_url
  61. };
  62. if(typeof(danmuListUrl) !== 'undefined'){
  63. opt.danmu_list_url = danmuListUrl
  64. }
  65. jQuery.extend(DanmuManager.prototype, jQuery.eventEmitter);
  66. window.dm_mgr = new DanmuManager(opt);
  67. dm_mgr.on('no_more_data', function(){
  68. dm_mgr.log('* EVENT::no_more_data');
  69. dm_mgr.get_list();
  70. });
  71. dm_mgr.on('dm_on', function(){
  72. if(typeof __socket == 'undefined'){
  73. // start_sio(article_id, dm_mgr);
  74. return;
  75. }
  76. if(__socket && !__socket.connected){
  77. __socket.connect();
  78. }
  79. });
  80. dm_mgr.on('dm_off', function(){
  81. if(typeof __socket != 'undefined' && __socket.connected){
  82. __socket.disconnect();
  83. }
  84. });
  85. /***************C.C. 2014-08-26******************/
  86. var __ts="";
  87. if(location.search.indexOf('turn_dm=') >= 0){
  88. __ts = getParameterByName('turn_dm');
  89. //turn_dm2(ts + (new Date).valueOf());
  90. if(__ts == 'on'){
  91. localStorage.dmState = 'on';
  92. } else {
  93. localStorage.dmState = 'off';
  94. }
  95. }
  96. /***************C.C. 2014-08-26******************/
  97. window._re = new DMRE(dm_mgr, __ts != "");
  98. /*----------------C.C. 2014-08-25 -------------- */
  99. if(__ts){
  100. if(__ts =='on'){
  101. localStorage.dmState = 'on';
  102. _re._start();
  103. // start_sio(article_id, dm_mgr);
  104. } else {
  105. localStorage.dmState = 'off';
  106. _re._close();
  107. }
  108. return;
  109. }
  110. /*------------------------------------------------*/
  111. window._re._start();
  112. // start_sio(article_id, dm_mgr);
  113. };
  114. // for test
  115. var DM = function(){
  116. this.nickname = '';
  117. this.content = '';
  118. this.avatar = '';
  119. this.type = 'polling';
  120. };
  121. var DM_ToString = DM.prototype.toString = function(){
  122. return 'nickname=' + this.nickname + ', content=' + this.content + ', avatar=' + this.avatar + ', type=' + this.type;
  123. };
  124. function initDm(entity, entity_id, list_url){
  125. setTimeout(function(){
  126. // $('body').prepend('<div id="dm-switch"><div class="dm-switch-icon"></div></div>');
  127. $('body').prepend('<div id="dm"></div>');
  128. start(entity, entity_id, list_url);
  129. //点击每个弹幕块
  130. // var inputField = api.require('inputField');
  131. $('#dm').on('click','.dm-item',function(){
  132. var that=this;
  133. to_comment_id=$(that).data('id');
  134. $('#chat').attr('placeholder','回复'+$(that).data('nickname')).focus();
  135. // inputField.becomeFirstResponder();
  136. });
  137. }, 1000);
  138. };