Commit 62338b62 authored by nextime's avatar nextime

update eventsource

parent b6239101
......@@ -35,7 +35,8 @@ foreach($panels as $panel) {
$buttonar_left=getPanelButtons($_DOMOTIKA['username'], $panel['panel_content'], $panel['panel_sections'], $panel['panel_websections'], $panel['panel_selector'],true,7);
break;
case 'gxv3175_center':
$buttonar_center=getPanelButtons($_DOMOTIKA['username'], $panel['panel_content'], $panel['panel_sections'], $panel['panel_websections'], $panel['panel_selector'],true,7);
$buttonar_center=DB::query("SELECT button_name,screenshot FROM mediasources
WHERE websection='citophone' AND active=1 ORDER BY position,id"); // AND DMDOMAIN(button_name, '".$panel['panel_content']."')=1
break;
case 'gxv3175_right':
$buttonar_right=getPanelButtons($_DOMOTIKA['username'], $panel['panel_content'], $panel['panel_sections'], $panel['panel_websections'], $panel['panel_selector'],true,7);
......@@ -46,24 +47,40 @@ foreach($panels as $panel) {
//$buttonar_left=getPanelButtons($_DOMOTIKA['username'], "*","*","_grandstream_left", "dmdomain","true",7);
//$buttonar_right=getPanelButtons($_DOMOTIKA['username'], "*","*","_grandstream_right", "dmdomain","true",7);
//print_r($buttonar_left);
//print_r($buttonar_center);
?>
<html>
<head>
<script type="text/javascript"
src="https://getfirebug.com/firebug-lite.js">
{
overrideConsole: false,
startInNewWindow: false,
startOpened: true,
enableTrace: true
}
</script>
<title>Domotika GMI Interface</title>
<link rel="stylesheet" href="/resources/pure/pure-nr-min.css">
<link rel="stylesheet" href="/resources/fontawesome/css/font-awesome.min.css">
<link href='style.css' type='text/css' rel='stylesheet'>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate, max-age=-1, max-stale=0, post-check=0, pre-check=0">
<meta http-equiv="expires" content="-1">
<!--
<script src="/resources/js/sockjs-0.3.min.js" ></script>
<script src="/resources/js/ajaxsocket.js" ></script>
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
-->
<script src="/resources/js/jquery-1.9.0.min.js"></script>
<script type="text/javascript" src="http://getfirebug.com/firebug-lite.js"></script>
-->
<script src="/resources/js/zepto.min.js"></script>
<script src="/resources/EventSource/eventsource.js"></script>
<script language="javascript" src="simpleGMI.js"></script>
<script type="text/javascript">
window.lastAction=new Date().getTime();
simpleGMI.fullScreen();
/**
......@@ -99,7 +116,7 @@ $.fn.alterClass = function ( removals, additions ) {
});
return !additions ? self : self.addClass( additions );
};
})( jQuery );
})( window.jQuery || window.Zepto );
/*
function postreply(arg)
......@@ -119,15 +136,16 @@ function playClick(volume) {
function butpushed(btype, bid)
{
window.lastAction=new Date().getTime();
//playClick(1);
//simpleGMI.play('/domotika/gmi/beep.wav',0,0,function(data){alert(data)});
$.post("/rest/v1.2/"+btype+"/setbyid/"+bid+"/json");
//simpleGMI.post("http://q.unixmedia.net/rest/v1.2/"+btype+"/setbyid/"+bid+"/json", 'gmi=true', postreply);
}
setInterval(function(){
simpleGMI.refresh();
}, 3600000);
//setInterval(function(){
// simpleGMI.refresh();
//}, 3600000);
// simpleGMI.post('http://q.unixmedia.net/domotika/gmi/style.css', 'aaa=sarca', postreply);
//}, 5000);
</script>
......@@ -151,26 +169,22 @@ setInterval(function(){
</div>
<div class="pure-u-1-3" style="width:31%">
<div style="padding:5px;">
<button class="pure-button pure-button-primary" style="width:100%;height:130px;" onclick="simpleGMI.refresh()">test</button>
<? if(count($buttonar_center)<1) { ?>
<button class="pure-button pure-button-primary" style="width:100%;height:130px;" onclick="simpleGMI.refresh()">No Citophones</button>
<? } else { ?>
<select class="styled-select" id=camerasel name=camerasel style="width:100%;height:130px;">
<? foreach($buttonar_center as $cit) { ?>
<option value="<?=$cit['screenshot'];?>"><?=$cit['button_name']?></option>
<? } ?>
</select>
<? } ?>
</div>
<div style="height:80px" onclick="simpleGMI.refresh()">
</div>
<div style="padding:5px;display:none">
<img src="https://192.168.4.45/enu/camera320x240.jpg" style="width:100%;height:190px" onclick="simpleGMI.refresh()"></img>
<div style="padding:5px;display:block">
<img id="camera" src="/domotika/gmi/img/camera.jpg" style="width:100%;height:190px" onclick="simpleGMI.refresh()"></img>
</div>
<div style="padding:5px;">
<div class="pure-g">
<div class="pure-u-1-3" >
<button class="pure-button"><h1>15</h1></button>
</div>
<div class="pure-u-1-3" style="width:28%">
<button class="pure-button"><h1>:</h1></button>
</div>
<div class="pure-u-1-3" >
<button class="pure-button"><h1>15</h1></button>
</div>
</div>
</div>
</div>
......@@ -231,7 +245,29 @@ var syncReceived = function(event) {
}
es.addEventListener("sync", syncReceived);
setInterval(function(){
window.camimage = new Image();
window.camimage.src = "/domotika/gmi/img/camera.jpg";
function updateImage()
{
if(window.camimage.complete) {
$('#camera').attr('src', window.camimage.src);
window.camimage = new Image();
window.camimage.src = $('#camerasel').val() + "?time=" + new Date().getTime();
//alert($('#camerasel option:selected').text());
}
if(es!=null)
setTimeout(updateImage, 500);
}
window.camimagenum = <?=count($buttonar_center)?>;
if(window.camimagenum>0)
updateImage();
keepAlive = setInterval(function(){
$.get("/rest/v1.2/keepalive/json",
function(r){
if(r.data=='SLOGGEDOUT')
......@@ -241,6 +277,29 @@ setInterval(function(){
}
});
},5000);
function endGMI()
{
clearInterval(keepAlive);
es.close();
es=null;
simpleGMI.exit();
}
function checkEnd()
{
window.checkAction=new Date().getTime();
if((window.checkAction-window.lastAction)>30000)
{
endGMI();
} else {
setTimeout(checkEnd, 1000);
}
}
setTimeout(checkEnd, 1000);
setTimeout(endGMI, 900000);
</script>
</body>
</html>
......@@ -43,3 +43,4 @@ body {
button:active {
background: yellow;
}
......@@ -5,7 +5,7 @@
*/
/*jslint indent: 2, vars: true, plusplus: true */
/*global setTimeout, clearTimeout, navigator */
/*global setTimeout, clearTimeout */
(function (global) {
"use strict";
......@@ -38,6 +38,7 @@
EventTarget.prototype = {
dispatchEvent: function (event) {
event.target = this;
var type = String(event.type);
var listeners = this.listeners;
var typeListeners = listeners.get(type);
......@@ -97,6 +98,7 @@
function Event(type) {
this.type = type;
this.target = null;
}
function MessageEvent(type, options) {
......@@ -122,11 +124,8 @@
var VALUE_START = 6;
var VALUE = 7;
var contentTypeRegExp = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i;
var isWebKitBefore535 = /AppleWebKit\/5([0-2][0-9]|3[0-4])[\.\s\w]/.test(navigator.userAgent);
var isGecko = Boolean(XHR && ((new XHR()).sendAsBinary !== undefined));
var isPresto = Object.prototype.toString.call(global.opera) === "[object Opera]";
var MINIMUM_DURATION = 1;
var MINIMUM_DURATION = 1000;
var MAXIMUM_DURATION = 18000000;
function getDuration(value, def) {
......@@ -149,7 +148,6 @@
var withCredentials = Boolean(isCORSSupported && options && options.withCredentials);
var initialRetry = getDuration(options ? options.retry : NaN, 1000);
var retryLimit = getDuration(options ? options.retryLimit : NaN, 300000);
var heartbeatTimeout = getDuration(options ? options.heartbeatTimeout : NaN, 45000);
var lastEventId = (options && options.lastEventId && String(options.lastEventId)) || "";
var that = this;
......@@ -191,15 +189,20 @@
function onProgress(isLoadEnd) {
var responseText = currentState === OPEN || currentState === CONNECTING ? xhr.responseText || "" : "";
var event = null;
var isWrongStatusCodeOrContentType = false;
if (currentState === CONNECTING) {
var status = 0;
var statusText = "";
var contentType = "";
if (isXHR) {
try {
status = Number(xhr.status || 0);
statusText = String(xhr.statusText || "");
contentType = String(xhr.getResponseHeader("Content-Type") || "");
} catch (error) {
// https://bugs.webkit.org/show_bug.cgi?id=29121
status = 0;
// FF < 14, WebKit
// https://bugs.webkit.org/show_bug.cgi?id=29658
// https://bugs.webkit.org/show_bug.cgi?id=77854
......@@ -219,6 +222,19 @@
if (currentState === CLOSED) {
return;
}
} else {
if (status !== 0) {
var message = "";
if (status !== 200) {
message = "EventSource's response has a status " + status + " " + statusText.replace(/\s+/g, " ") + " that is not 200. Aborting the connection.";
} else {
message = "EventSource's response has a Content-Type specifying an unsupported type: " + contentType.replace(/\s+/g, " ") + ". Aborting the connection.";
}
setTimeout(function () {
throw new Error(message);
});
isWrongStatusCodeOrContentType = true;
}
}
}
......@@ -228,8 +244,9 @@
}
var i = charOffset - 1;
var length = responseText.length;
var c = "\n";
while (++i < length) {
var c = responseText[i];
c = responseText[i];
if (state === AFTER_CR && c === "\n") {
state = FIELD_START;
} else {
......@@ -246,11 +263,6 @@
} else if (field === "retry") {
initialRetry = getDuration(value, initialRetry);
retry = initialRetry;
if (retryLimit < initialRetry) {
retryLimit = initialRetry;
}
} else if (field === "retryLimit") {//!
retryLimit = getDuration(value, retryLimit);
} else if (field === "heartbeatTimeout") {//!
heartbeatTimeout = getDuration(value, heartbeatTimeout);
if (timeout !== 0) {
......@@ -307,15 +319,18 @@
}
if ((currentState === OPEN || currentState === CONNECTING) &&
(isLoadEnd || (charOffset > 1024 * 1024) || (timeout === 0 && !wasActivity))) {
(isLoadEnd || isWrongStatusCodeOrContentType || (charOffset > 1024 * 1024) || (timeout === 0 && !wasActivity))) {
currentState = WAITING;
xhr.abort();
if (timeout !== 0) {
clearTimeout(timeout);
timeout = 0;
}
if (retry > retryLimit) {
retry = retryLimit;
if (retry > initialRetry * 16) {
retry = initialRetry * 16;
}
if (retry > MAXIMUM_DURATION) {
retry = MAXIMUM_DURATION;
}
timeout = setTimeout(onTimeout, retry);
retry = retry * 2 + 1;
......@@ -340,7 +355,7 @@
onProgress(true);
}
if (isPresto) {
if (isXHR) {
// workaround for Opera issue with "progress" events
timeout0 = setTimeout(function f() {
if (xhr.readyState === 3) {
......@@ -356,36 +371,29 @@
onProgress(false);
return;
}
if (navigator.onLine === false) {
// "online" event is not supported under Web Workers
// https://bugs.webkit.org/show_bug.cgi?id=118832
timeout = setTimeout(onTimeout, 500);
return;
}
// loading indicator in Safari, Chrome < 14
if (isWebKitBefore535 && global.document && global.document.readyState !== "complete") {
timeout = setTimeout(onTimeout, 100);
// loading indicator in Safari, Chrome < 14, Firefox
// https://bugzilla.mozilla.org/show_bug.cgi?id=736723
if (isXHR && (xhr.sendAsBinary !== undefined || xhr.onloadend === undefined) && global.document && global.document.readyState && global.document.readyState !== "complete") {
timeout = setTimeout(onTimeout, 4);
return;
}
// XDomainRequest#abort removes onprogress, onerror, onload
xhr.onload = xhr.onerror = onLoadEnd;
// improper fix to match Firefox behaviour, but it is better than just ignore abort
// see https://bugzilla.mozilla.org/show_bug.cgi?id=768596
// https://bugzilla.mozilla.org/show_bug.cgi?id=880200
// https://code.google.com/p/chromium/issues/detail?id=153570
xhr.onabort = onLoadEnd;
if (isXHR) {
// improper fix to match Firefox behaviour, but it is better than just ignore abort
// see https://bugzilla.mozilla.org/show_bug.cgi?id=768596
// https://bugzilla.mozilla.org/show_bug.cgi?id=880200
// https://code.google.com/p/chromium/issues/detail?id=153570
xhr.onabort = onLoadEnd;
// Firefox 3.5 - 3.6 - ? < 9.0
// onprogress is not fired sometimes or delayed
xhr.onreadystatechange = onProgress2;
}
if (!isGecko) {// Firefox (any version) shows loading indicator
xhr.onprogress = onProgress2;
}
xhr.onprogress = onProgress2;
wasActivity = false;
timeout = setTimeout(onTimeout, heartbeatTimeout);
......@@ -407,12 +415,12 @@
}
xhr.open("GET", s, true);
// withCredentials should be set after "open" for Safari and Chrome (< 19 ?)
xhr.withCredentials = withCredentials;
if (isXHR) {
// withCredentials should be set after "open" for Safari and Chrome (< 19 ?)
xhr.withCredentials = withCredentials;
xhr.responseType = "text";
xhr.responseType = "text";
if (isXHR) {
// Request header field Cache-Control is not allowed by Access-Control-Allow-Headers.
// "Cache-control: no-cache" are not honored in Chrome and Firefox
// https://bugzilla.mozilla.org/show_bug.cgi?id=428916
......@@ -455,6 +463,7 @@
// https://code.google.com/p/chromium/issues/detail?id=260144
// https://code.google.com/p/chromium/issues/detail?id=225654
// ...
global.NativeEventSource = global.EventSource;
global.EventSource = EventSource;
}
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment