images: update small tile to try & pass CWS guidelines
[chrome-ext/music-player-client.git] / js / tcp-client.js
index c46921f2396d48d263e326f9ed7c04dd08ec3798..dd0c189dc62a7a711bd11c8cfbf649b854b5b0eb 100644 (file)
@@ -42,6 +42,7 @@ Author: Boris Smus (smus@chromium.org)
     // Socket.
     this.socketId = null;
     this.isConnected = false;
+    this.pollerId = null;
 
     log('initialized tcp client');
   }
@@ -92,7 +93,11 @@ Author: Boris Smus (smus@chromium.org)
    */
   TcpClient.prototype.disconnect = function() {
     socket.disconnect(this.socketId);
-    this.isConnected = false;
+    if (this.isConnected) {
+      clearInterval(this.pollerId);
+      this.pollerId = null;
+      this.isConnected = false;
+    }
   };
 
   /**
@@ -105,10 +110,12 @@ Author: Boris Smus (smus@chromium.org)
    * @param {Object} createInfo The socket details
    */
   TcpClient.prototype._onCreate = function(createInfo) {
+    if (this.socketId !== null) {
+      socket.destroy(this.socketId);
+    }
     this.socketId = createInfo.socketId;
     if (this.socketId > 0) {
       socket.connect(this.socketId, this.host, this.port, this._onConnectComplete.bind(this));
-      this.isConnected = true;
     } else {
       error('Unable to create socket');
     }
@@ -123,12 +130,20 @@ Author: Boris Smus (smus@chromium.org)
    * @param {Number} resultCode Indicates whether the connection was successful
    */
   TcpClient.prototype._onConnectComplete = function(resultCode) {
+    log('resultCode: ' + resultCode);
+
+    // XXX: Can this ever be positive ?
+    this.isConnected = (resultCode >= 0);
+
     // Start polling for reads.
-    setInterval(this._periodicallyRead.bind(this), 500);
+    clearInterval(this.pollerId);
+    if (this.isConnected) {
+      this.pollerId = setInterval(this.poll.bind(this), 500);
+    }
 
     if (this.callbacks.connect) {
       log('connect complete');
-      this.callbacks.connect();
+      this.callbacks.connect(resultCode);
     }
     log('onConnectComplete');
   };
@@ -138,7 +153,7 @@ Author: Boris Smus (smus@chromium.org)
    *
    * @see http://developer.chrome.com/apps/socket.html#method-read
    */
-  TcpClient.prototype._periodicallyRead = function() {
+  TcpClient.prototype.poll = function() {
     socket.read(this.socketId, null, this._onDataRead.bind(this));
   };
 
@@ -214,14 +229,14 @@ Author: Boris Smus (smus@chromium.org)
    * Wrapper function for logging
    */
   function log(msg) {
-    //console.log('tcp-client: ', msg);
+    //console.log('tcp-client:', msg);
   }
 
   /**
    * Wrapper function for error logging
    */
   function error(msg) {
-    console.error('tcp-client: ', msg);
+    console.error('tcp-client:', msg);
   }
 
   exports.TcpClient = TcpClient;