Little refractoring of makeFriends function
authorChocobozzz <florian.bigard@gmail.com>
Mon, 29 Feb 2016 17:52:12 +0000 (18:52 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Mon, 29 Feb 2016 17:52:12 +0000 (18:52 +0100)
lib/friends.js

index 8cc1a3151b6d2c3d2930e2a4d6de819c0d485266..006a64404fd05405b9648fce4315d982d858cc48 100644 (file)
@@ -54,110 +54,18 @@ function makeFriends (callback) {
 
     var urls = config.get('network.friends')
 
-    async.each(urls, computeForeignPodsList, function (err) {
+    async.each(urls, function (url, callback) {
+      computeForeignPodsList(url, pods_score, callback)
+    }, function (err) {
       if (err) return callback(err)
 
       logger.debug('Pods scores computed.', { pods_score: pods_score })
       var pods_list = computeWinningPods(urls, pods_score)
       logger.debug('Pods that we keep computed.', { pods_to_keep: pods_list })
 
-      makeRequestsToWinningPods(cert, pods_list)
+      makeRequestsToWinningPods(cert, pods_list, callback)
     })
   })
-
-  // -----------------------------------------------------------------------
-
-  function computeForeignPodsList (url, callback) {
-    // Let's give 1 point to the pod we ask the friends list
-    pods_score[url] = 1
-
-    getForeignPodsList(url, function (err, foreign_pods_list) {
-      if (err) return callback(err)
-      if (foreign_pods_list.length === 0) return callback()
-
-      async.each(foreign_pods_list, function (foreign_pod, callback_each) {
-        var foreign_url = foreign_pod.url
-
-        if (pods_score[foreign_url]) pods_score[foreign_url]++
-        else pods_score[foreign_url] = 1
-
-        callback_each()
-      }, function () {
-        callback()
-      })
-    })
-  }
-
-  function computeWinningPods (urls, pods_score) {
-    // Build the list of pods to add
-    // Only add a pod if it exists in more than a half base pods
-    var pods_list = []
-    var base_score = urls.length / 2
-    Object.keys(pods_score).forEach(function (pod) {
-      if (pods_score[pod] > base_score) pods_list.push({ url: pod })
-    })
-
-    return pods_list
-  }
-
-  function makeRequestsToWinningPods (cert, pods_list) {
-    // Stop pool requests
-    poolRequests.deactivate()
-    // Flush pool requests
-    poolRequests.forceSend()
-
-    // Get the list of our videos to send to our new friends
-    Videos.listOwned(function (err, videos_list) {
-      if (err) {
-        logger.error('Cannot get the list of videos we own.')
-        return callback(err)
-      }
-
-      var data = {
-        url: http + '://' + host + ':' + port,
-        publicKey: cert,
-        videos: videos_list
-      }
-
-      requests.makeMultipleRetryRequest(
-        { method: 'POST', path: '/api/' + constants.API_VERSION + '/pods/', data: data },
-
-        pods_list,
-
-        function eachRequest (err, response, body, url, pod, callback_each_request) {
-          // We add the pod if it responded correctly with its public certificate
-          if (!err && response.statusCode === 200) {
-            Pods.add({ url: pod.url, publicKey: body.cert, score: constants.FRIEND_BASE_SCORE }, function (err) {
-              if (err) logger.error('Error with adding %s pod.', pod.url, { error: err })
-
-              Videos.addRemotes(body.videos, function (err) {
-                if (err) logger.error('Error with adding videos of pod.', pod.url, { error: err })
-
-                logger.debug('Adding remote videos from %s.', pod.url, { videos: body.videos })
-                return callback_each_request()
-              })
-            })
-          } else {
-            logger.error('Error with adding %s pod.', pod.url, { error: err || new Error('Status not 200') })
-            return callback_each_request()
-          }
-        },
-
-        function endRequests (err) {
-          // Now we made new friends, we can re activate the pool of requests
-          poolRequests.activate()
-
-          if (err) {
-            logger.error('There was some errors when we wanted to make friends.')
-            return callback(err)
-          }
-
-          logger.debug('makeRequestsToWinningPods finished.')
-          return callback(null)
-        }
-      )
-    })
-  }
 }
 
 function quitFriends (callback) {
@@ -211,6 +119,39 @@ module.exports = pods
 
 // ---------------------------------------------------------------------------
 
+function computeForeignPodsList (url, pods_score, callback) {
+  // Let's give 1 point to the pod we ask the friends list
+  pods_score[url] = 1
+
+  getForeignPodsList(url, function (err, foreign_pods_list) {
+    if (err) return callback(err)
+    if (foreign_pods_list.length === 0) return callback()
+
+    async.each(foreign_pods_list, function (foreign_pod, callback_each) {
+      var foreign_url = foreign_pod.url
+
+      if (pods_score[foreign_url]) pods_score[foreign_url]++
+      else pods_score[foreign_url] = 1
+
+      callback_each()
+    }, function () {
+      callback()
+    })
+  })
+}
+
+function computeWinningPods (urls, pods_score) {
+  // Build the list of pods to add
+  // Only add a pod if it exists in more than a half base pods
+  var pods_list = []
+  var base_score = urls.length / 2
+  Object.keys(pods_score).forEach(function (pod) {
+    if (pods_score[pod] > base_score) pods_list.push({ url: pod })
+  })
+
+  return pods_list
+}
+
 function getForeignPodsList (url, callback) {
   var path = '/api/' + constants.API_VERSION + '/pods'
 
@@ -220,3 +161,68 @@ function getForeignPodsList (url, callback) {
     callback(null, JSON.parse(body))
   })
 }
+
+function makeRequestsToWinningPods (cert, pods_list, callback) {
+  // Stop pool requests
+  poolRequests.deactivate()
+  // Flush pool requests
+  poolRequests.forceSend()
+
+  // Get the list of our videos to send to our new friends
+  Videos.listOwned(function (err, videos_list) {
+    if (err) {
+      logger.error('Cannot get the list of videos we own.')
+      return callback(err)
+    }
+
+    var data = {
+      url: http + '://' + host + ':' + port,
+      publicKey: cert,
+      videos: videos_list
+    }
+
+    requests.makeMultipleRetryRequest(
+      { method: 'POST', path: '/api/' + constants.API_VERSION + '/pods/', data: data },
+
+      pods_list,
+
+      function eachRequest (err, response, body, url, pod, callback_each_request) {
+        // We add the pod if it responded correctly with its public certificate
+        if (!err && response.statusCode === 200) {
+          Pods.add({ url: pod.url, publicKey: body.cert, score: constants.FRIEND_BASE_SCORE }, function (err) {
+            if (err) {
+              logger.error('Error with adding %s pod.', pod.url, { error: err })
+              return callback_each_request()
+            }
+
+            Videos.addRemotes(body.videos, function (err) {
+              if (err) {
+                logger.error('Error with adding videos of pod.', pod.url, { error: err })
+                return callback_each_request()
+              }
+
+              logger.debug('Adding remote videos from %s.', pod.url, { videos: body.videos })
+              return callback_each_request()
+            })
+          })
+        } else {
+          logger.error('Error with adding %s pod.', pod.url, { error: err || new Error('Status not 200') })
+          return callback_each_request()
+        }
+      },
+
+      function endRequests (err) {
+        // Now we made new friends, we can re activate the pool of requests
+        poolRequests.activate()
+
+        if (err) {
+          logger.error('There was some errors when we wanted to make friends.')
+          return callback(err)
+        }
+
+        logger.debug('makeRequestsToWinningPods finished.')
+        return callback(null)
+      }
+    )
+  })
+}