mirror of
https://github.com/Doodle3D/doodle3d-connect.git
synced 2024-11-05 07:03:24 +01:00
169 lines
4.7 KiB
JavaScript
169 lines
4.7 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 $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();
|
|
|
|
// make sure all links are opened in same WebApp (added to homescreen)
|
|
// and they don't start a browser
|
|
$.stayInWebApp('a',true);
|
|
});
|
|
|
|
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);
|
|
} |