PageRenderTime 41ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/js/byd.client.socket.js

https://github.com/mercredo/bydcontrol
JavaScript | 166 lines | 118 code | 21 blank | 27 comment | 12 complexity | 9d8f6ea04eac668f1eb8788d30e387b3 MD5 | raw file
Possible License(s): GPL-2.0
  1. var BydSocket = function(ip, port){
  2. var cObj = this;
  3. this.socket = {};
  4. this.ip = ip || "127.0.0.1", this.port = port || "8081";
  5. this._ioScriptLoaded = false;
  6. // console.log(ip + " " + port);
  7. this.init = function(onComplete, onFail){
  8. cObj._enableIOScript(function(){
  9. //io complete::start initiating nodeConfig
  10. cObj.createSocket(function(){
  11. // do stuff
  12. onComplete(); //{'bridge':{'ip':cObj.nodejsIP,'port':cObj.nodejsPort},'osc':{'incoming':'1337', 'outgoing':'1338'}}
  13. });
  14. }, function(){
  15. onFail();
  16. });
  17. return this;
  18. };
  19. this.createSocket = function(onConnected){
  20. console.log('connecting io...');
  21. // if(io){
  22. // this.socket = io.connect('http://' + this.ip, { port: this.port, rememberTransport: false}); //deprecated
  23. this.socket = io("http://" + this.ip + ":8081").on('connect', function(){
  24. console.log("websocket connected");
  25. onConnected();
  26. });
  27. return this;
  28. };
  29. this.updateServer = function(serverType, cfg, callback){
  30. // if(this.socket.socket){ //deprecated
  31. if(this.socket.connected){
  32. cObj.socket.emit(serverType || "default",
  33. {
  34. server: {
  35. port: cfg.incomingPort || 3333, //incoming, default: 3333
  36. host: cObj.ip
  37. },
  38. client: {
  39. port: cfg.outgoingPort || 3334, //outgoing, default: 3334
  40. host: cObj.ip
  41. }
  42. }
  43. );
  44. callback(cfg);
  45. }
  46. else
  47. throw new Error("No socket connected!");
  48. return this;
  49. };
  50. this.createServer = function(serverType, cfg){
  51. // if(this.socket.socket){ // deprecated
  52. if(this.socket.connected){
  53. console.log("Creating subServer <" + serverType + "|i:" + cfg.incomingPort + ",o:" + cfg.outgoingPort + "> on " + this.ip + ":" + this.port + "...");
  54. // socket.emit will only run once
  55. // this.socket.on('connect', function() { //temporarily removed after migration to socket.io-v1.0; prevents from being run twice
  56. // console.log('socketonconnect');
  57. // sends to socket.io server the host/port of oscServer
  58. // and oscClient
  59. this.socket.emit(serverType || "default",
  60. {
  61. server: {
  62. port: cfg.incomingPort || 3333, //incoming, default: 3333
  63. host: cObj.ip
  64. },
  65. client: {
  66. port: cfg.outgoingPort || 3334, //outgoing, default: 3334
  67. host: cObj.ip
  68. }
  69. }
  70. );
  71. // });
  72. }
  73. else
  74. throw new Error("No socket created!");
  75. return this;
  76. };
  77. this._enableIOScript = function(onComplete, onFail){
  78. console.log("enabling script..." + cObj.ip + " " + cObj.port);
  79. // addScript("http://" + ip + ":" + port + "/socket.io/socket.io.js");
  80. $.ajax({
  81. url: "http://" + cObj.ip + ":" + cObj.port + "/socket.io/socket.io.js",
  82. crossDomain: true,
  83. dataType: "script",
  84. success: function () {
  85. console.log("ioScript loaded!");
  86. cObj._ioScriptLoaded = true;
  87. onComplete(io);
  88. // script is loaded
  89. },
  90. error: function () {
  91. console.log("ioScript failed!");
  92. // handle errors
  93. },
  94. complete: function(){
  95. console.log("complete");
  96. console.log(cObj._ioScriptLoaded);
  97. if(!cObj._ioScriptLoaded){
  98. console.log("ioScript failed!");
  99. console.log(data);
  100. onFail();
  101. }
  102. cObj._ioScriptLoaded = false;
  103. console.log(cObj._ioScriptLoaded);
  104. }
  105. });
  106. };
  107. // TODO: maybe to be outsourced to new oscclass
  108. this.sendOSC = function(cID, val, callback){
  109. var osc = "", obj, val;
  110. var _send = function(data){
  111. console.log("\tover socket");
  112. obj = data.oscData.cID;
  113. val = data.oscData.value;
  114. // osc = "/" + data.oscData.cID + " " + data.oscData.value;
  115. // console.log('\toscOut:: ' + osc);
  116. // cObj.socket.emit('oscOut', osc);
  117. console.log("send /" + data.oscData.cID + " " + data.oscData.value);
  118. cObj.socket.emit('oscOut', "/" + obj, val + ""); //string-HACK for element.button.js; problematic?????; maybe use 0/1
  119. callback(obj, val);
  120. };
  121. var data = {"oscData":
  122. {
  123. // uiType: uiType,
  124. value: val,
  125. cID: cID
  126. }
  127. };
  128. console.log("sending osc-request");
  129. _send(data);
  130. // if(!ajax)_send(data);
  131. // else ajaxHandler.send(data);
  132. };
  133. this.sendGUI = function(gui){
  134. // TODO: check if valid xml (-->loadxml.js.php)
  135. cObj.socket.emit('guiOut', gui);
  136. };
  137. this._listen = function(type, callback){
  138. // Listener for incoming nodeJS-Messages
  139. this.socket.on(type || 'message', function(obj) {
  140. // console.log("showing OBJ, while listening on msg[" + type + "]");
  141. // console.log(obj);
  142. callback(obj);
  143. });
  144. };
  145. }