0
0
mirror of https://github.com/Doodle3D/doodle3d-connect.git synced 2024-06-29 10:21:21 +02:00
doodle3d-connect/js/main.js
2014-02-25 14:24:54 +01:00

166 lines
4.6 KiB
JavaScript

/*
* This file is part of the Doodle3D project (http://doodle3d.com).
*
* Copyright (c) 2013, Doodle3D
* This software is licensed under the terms of the GNU GPL v2 or later.
* See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details.
*/
var retrieveListInterval = 3000;
var retrieveListDelay; // retry setTimout instance
var boxTimeoutTime = 500;
var numBoxesChecking = 0; // count how many boxes we are checking
var numBoxesFound = 0; // count how many boxes responded
var connectedBox = {localip:"192.168.5.1",wifiboxid:"Wired WiFi-Box"};
var apBox = {localip:"192.168.10.1",wifiboxid:"WiFi-Box",link:"http://draw.doodle3d.com"};
var connectAPI = "http://connect.doodle3d.com/api"
var boxAPI = "http://draw.doodle3d.com/d3dapi";
var $list;
var $intro;
var $hint;
var $preloader;
var spinner;
var boxes = {};
var numBoxes = 0;
var networkAPI = new NetworkAPI();
var connectAPI = new ConnectAPI();
$(function() {
// console.log("ready");
networkAPI.init();
$intro = $("#intro");
$list = $("#list");
$hint = $("#hint");
$preloader = $("#preloader");
var spinnerSettings = {
lines: 7, // The number of lines to draw
length: 0, // The length of each line
width: 14, // The line thickness
radius: 15, // The radius of the inner circle
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#57BF42', // #rgb or #rrggbb or array of colors
speed: 1.2, // Rounds per second
trail: 69, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'spinner', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: 'auto', // Top position relative to parent in px
left: 'auto' // Left position relative to parent in px
};
spinner = new Spinner(spinnerSettings);
spinner.spin($preloader[0]);
retrieveList();
});
function retrieveList() {
$preloader.show();
//spinner.spin($preloader[0]);
connectAPI.list(function(foundBoxes) {
//console.log(" foundBoxes: ",foundBoxes);
foundBoxes.push(connectedBox);
updateList(foundBoxes);
clearTimeout(retrieveListDelay);
retrieveListDelay = setTimeout(retrieveList, retrieveListInterval);
removeBox(apBox.localip,true);
}, function() {
// if web is not accessible try to find the box as an accesspoint
// if not found, we look for a wired box
networkAPI.alive(apBox.localip,boxTimeoutTime,function() {
updateList([apBox]);
}, function() {
updateList([connectedBox]);
});
clearTimeout(retrieveListDelay);
retrieveListDelay = setTimeout(retrieveList, retrieveListInterval); // retry after delay
});
}
function updateList(foundBoxes) {
//console.log("updateList");
numBoxesChecking = 0;
numBoxesFound = 0;
if (foundBoxes===undefined) foundBoxes = [];
// remove displayed, but not found boxes
jQuery.each(boxes, function (index,box) {
var found = false;
jQuery.each(foundBoxes, function (index,foundBox) {
if(foundBox.localip == box.localip &&
foundBox.wifiboxid == box.wifiboxid) found = true;
});
if(!found) removeBox(box.localip);
})
// check if all found boxes are alive
jQuery.each(foundBoxes, function (index,foundBox) {
checkBox(foundBox);
});
updateIntro();
}
function checkBox(boxData) {
//console.log(" checkBox: ",boxData.localip);
numBoxesChecking++;
networkAPI.alive(boxData.localip,boxTimeoutTime,function() {
addBox(boxData);
numBoxesFound++;
numBoxesChecking--;
}, function() {
removeBox(boxData.localip);
numBoxesChecking--;
});
}
function getBox(localip) {
return boxes[localip];
}
function addBox(boxData) {
if(getBox(boxData.localip) !== undefined) return;
//console.log("addBox: ",boxData.localip);
var box = new Box();
box.init(boxData,$list);
box.destroyedHandler = boxDestroyedHandler;
boxes[box.localip] = box;
numBoxes++;
updateIntro();
}
function removeBox(localip,force) {
var box = getBox(localip);
if(box === undefined) return;
//console.log("removeBox: ",localip," force: ",force);
if(!force && box.connecting) return;
//console.log(" calling destroyed");
box.destroy();
}
function boxDestroyedHandler(box) {
//console.log("boxDestroyedHandler");
delete boxes[box.localip];
numBoxes--;
updateIntro();
}
function updateIntro() {
//console.log("updateIntro, numBoxes: ",numBoxes);
if(numBoxes > 0) {
$intro.html("Found the following boxes near you:");
$hint.fadeOut();
} else {
$intro.html("No boxes found near you.");
$hint.fadeIn();
}
$preloader.fadeOut(1000);
}