0
0
mirror of https://github.com/Doodle3D/doodle3d-connect.git synced 2024-06-02 00:34:32 +02:00
doodle3d-connect/js/main.js

165 lines
4.3 KiB
JavaScript
Raw Normal View History

2013-10-02 17:24:40 +02:00
2013-10-18 11:58:26 +02:00
var retrieveListInterval = 3000;
2013-10-02 17:24:40 +02:00
var retrieveListDelay; // retry setTimout instance
2013-10-03 18:06:05 +02:00
var boxTimeoutTime = 500;
2013-10-02 17:24:40 +02:00
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:"draw.doodle3d.com",wifiboxid:"WiFi-Box"};
var connectAPI = "http://connect.doodle3d.com/api"
var boxAPI = "http://draw.doodle3d.com/d3dapi";
var $list;
2013-10-02 17:24:40 +02:00
var $intro;
2013-10-18 11:58:26 +02:00
var $hint;
2013-10-02 17:24:40 +02:00
var $preloader;
var spinner;
$(function() {
// console.log("ready");
$intro = $("#intro");
2013-10-02 17:24:40 +02:00
$list = $("#list");
2013-10-18 11:58:26 +02:00
$hint = $("#hint");
2013-10-02 17:24:40 +02:00
$preloader = $("#preloader");
var spinnerSettings = {
2013-10-10 12:00:14 +02:00
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
2013-10-02 17:24:40 +02:00
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
2013-10-03 16:59:28 +02:00
color: '#57BF42', // #rgb or #rrggbb or array of colors
2013-10-10 12:00:14 +02:00
speed: 1.2, // Rounds per second
trail: 69, // Afterglow percentage
2013-10-02 17:24:40 +02:00
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();
// DEBUG
// numBoxesFound = 4;
// updateIntro();
});
function retrieveList() {
2013-10-02 17:24:40 +02:00
$preloader.show();
//spinner.spin($preloader[0]);
$.ajax({
timeout: 2000,
url: connectAPI+"/list.php",
2013-10-02 17:24:40 +02:00
dataType: 'json',
success: function(response){
//console.log("retrieveList response: ",response);
if(response.status == "success") {
var foundBoxes = response.data;
foundBoxes.push(connectedBox);
updateList(foundBoxes);
2013-10-02 17:24:40 +02:00
}
clearTimeout(retrieveListDelay);
2013-10-02 17:24:40 +02:00
retrieveListDelay = setTimeout(retrieveList, retrieveListInterval);
}
}).fail(function() {
console.log("retrieveList: failed");
// if web is not accessible try to find the box as an accesspoint
// if not found, we look for a wired box
checkBox(apBox, function(alive) {
if(alive) updateList([apBox]);
else updateList([connectedBox]);
});
2013-10-02 17:24:40 +02:00
clearTimeout(retrieveListDelay);
retrieveListDelay = setTimeout(retrieveList, retrieveListInterval); // retry after delay
});
}
function updateList(boxes) {
2013-10-02 17:24:40 +02:00
numBoxesChecking = 0;
numBoxesFound = 0;
if (boxes===undefined) boxes = [];
// remove displayed, but unlisted boxes
$list.find("a").each(function(index, element) {
var localip = $(element).attr("id");
var wifiboxid = $(element).text();
var found = false;
jQuery.each(boxes, function (index,box) {
if(box.localip == localip && box.wifiboxid == wifiboxid) found = true;
});
if(!found) $(element).parent().remove();
})
jQuery.each(boxes, function (index,box) {
2013-09-30 17:34:27 +02:00
checkBox(box);
});
//checkBox(connectedBox);
2013-10-02 17:24:40 +02:00
updateIntro();
2013-09-30 17:34:27 +02:00
}
function checkBox(box,checked) {
2013-10-02 17:24:40 +02:00
numBoxesChecking++;
2013-09-30 17:34:27 +02:00
$.ajax({
2013-10-03 18:06:05 +02:00
url: "http://"+box.localip+"/d3dapi/network/alive",
dataType: "json",
2013-10-02 17:24:40 +02:00
timeout: boxTimeoutTime,
2013-09-30 17:34:27 +02:00
success: function(response){
var alive = (response.status == "success");
if(alive) {
2013-10-02 17:24:40 +02:00
numBoxesFound++;
addBox(box);
} else {
removeBox(box);
2013-09-30 17:34:27 +02:00
}
2013-10-02 17:24:40 +02:00
numBoxesChecking--;
updateIntro();
if(checked) checked(alive);
2013-09-30 17:34:27 +02:00
}
2013-10-02 17:24:40 +02:00
}).fail(function() {
//console.log("box not alive: "+box.wifiboxid);
2013-10-02 17:24:40 +02:00
numBoxesChecking--;
removeBox(box);
2013-10-02 17:24:40 +02:00
updateIntro();
if(checked) checked(false);
2013-09-30 17:34:27 +02:00
});
}
function addBox(box) {
if(boxExists(box.localip)) return;
var url = "http://"+box.localip;
var element = "<li><a href='"+url+"' id='"+box.localip+"'>"+box.wifiboxid+"</a></li>";
$(element).hide().appendTo($list).fadeIn(500);
}
function boxExists(localip){
return $list.find("a[id|='"+localip+"']").length > 0;
}
function removeBox(box) {
var $element = $list.find("a[id|='"+box.localip+"']");
$element.remove();
2013-10-02 17:24:40 +02:00
}
2013-10-02 17:24:40 +02:00
function updateIntro() {
2013-10-18 11:58:26 +02:00
$intro.fadeIn();
2013-10-02 17:24:40 +02:00
if(numBoxesChecking <= 0) {
if(numBoxesFound > 0) {
$intro.html("Found the following boxes near you:");
2013-10-18 11:58:26 +02:00
$hint.fadeOut();
2013-10-02 17:24:40 +02:00
} else {
$intro.html("No boxes found near you.");
2013-10-18 11:58:26 +02:00
$hint.fadeIn();
2013-10-02 17:24:40 +02:00
}
$preloader.fadeOut(1000);
}
}