forked from Clouda-team/Cloudajs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
offline improve of auth.js and status code change in reachability; wi…
…th bugfix of external.js with https://
- Loading branch information
brandnewera
committed
Feb 17, 2014
1 parent
d09438d
commit a3badbf
Showing
10 changed files
with
213 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/** | ||
* eventStack | ||
* @author [email protected] | ||
* usage: | ||
var targetObj = window; | ||
var onlineHandle = function(){console.log('window online')}; | ||
var offlineHandle = function(){console.log('window offline')}; | ||
sumeru.eventStack._on(targetObj,'online',onlineHandle); | ||
sumeru.eventStack._trigger(targetObj,'online'); | ||
sumeru.eventStack._off(targetObj,'online',onlineHandle); | ||
sumeru.eventStack._trigger(targetObj,'online'); | ||
当targetObj 省略时 targetObj == sumeru | ||
sumeru.eventStack._on('online',onlineHandle); | ||
sumeru.eventStack._on('offline',offlineHandle); | ||
*/ | ||
|
||
|
||
var runnable = function(sumeru){ | ||
if(sumeru.eventStack){ | ||
return; | ||
} | ||
//func将附加到target上,stackname是其在target上的属性名。 | ||
var STACKNAME ='_smr_eventFuncStack'; | ||
|
||
var api = sumeru.addSubPackage('eventStack'); | ||
|
||
//on是去重的。 | ||
var _on = function(target,eventName,func){ | ||
if(arguments.length==2){ | ||
var func = arguments[1]; | ||
var eventName = arguments[0]; | ||
var target = sumeru; | ||
} | ||
target[STACKNAME] = target[STACKNAME]||{}; | ||
target[STACKNAME][eventName] = target[STACKNAME][eventName]||[]; | ||
var hasIt = false; | ||
Array.prototype.forEach.call(target[STACKNAME][eventName],function(item){ | ||
if(item===func){ | ||
hasIt = true; | ||
} | ||
}) | ||
if(!hasIt)target[STACKNAME][eventName].push(func); | ||
}; | ||
var _off = function(target,eventName,func){ | ||
if(arguments.length==2){ | ||
var func = arguments[1]; | ||
var eventName = arguments[0]; | ||
var target = sumeru; | ||
} | ||
var funcs,p,len,i; | ||
if(target[STACKNAME]&&target[STACKNAME][eventName]){ | ||
funcs = target[STACKNAME][eventName]; | ||
len = funcs.length; | ||
for(i=0;i<len;i++){ | ||
if(funcs[i]===func){ | ||
funcs.splice(i,1); | ||
return;//_on是去重的,所以匹配的只可能有一个。 | ||
} | ||
} | ||
} | ||
}; | ||
var _trigger = function(target,eventName){ | ||
if(arguments.length==1){ | ||
var eventName = arguments[0]; | ||
var target = sumeru; | ||
} | ||
if(target[STACKNAME]&&target[STACKNAME][eventName]){ | ||
Array.prototype.forEach.call(target[STACKNAME][eventName],function(item){ | ||
item.call(this); | ||
}) | ||
} | ||
}; | ||
api.__reg('_on', _on, 'private'); | ||
api.__reg('_off', _off, 'private'); | ||
api.__reg('_trigger', _trigger, 'private'); | ||
} | ||
if(typeof module !='undefined' && module.exports){ | ||
// 本函数只运行在client | ||
//module.exports = runnable; | ||
}else{ | ||
runnable(sumeru); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/** | ||
* netStatus | ||
* 包装原生的 window.navigator.onLine 及window的online、offline事件。 | ||
* @author [email protected] | ||
*/ | ||
var runnable = function(sumeru){ | ||
if(sumeru.netStatus){ | ||
return; | ||
} | ||
var api = sumeru.addSubPackage('netStatus'); | ||
|
||
var NET_OFFLINE = 0x00;//network offline | ||
var NET_ONLINE = 0x100;//netnork online | ||
var status_ = window.navigator.onLine?NET_ONLINE:NET_OFFLINE; //默认取浏览器的在线状态,如果在壳里运行,需要配置壳的连接状态。 | ||
|
||
var TYPE_WIFI = 0x01; | ||
var TYPE_3G = 0x11; | ||
var TYPE_EDGE = 0x111; | ||
var TYPE_GPRS = 0x1111; | ||
var type_ = 0x00; //默认没有网络类型,暂未实现type的识别 | ||
|
||
var getNetworkInfo = function(){ | ||
return status_==NET_ONLINE?{ | ||
'type':type_, | ||
'status':status_ | ||
}:false; | ||
}; | ||
var setStatus_ = function(status){ | ||
status_ = status; | ||
return status_; | ||
}; | ||
var getStatus_ = function(){ | ||
return status_; | ||
}; | ||
|
||
var onlineHandle = function(){ | ||
//trigger socket reconnect... | ||
sumeru.reconnect && sumeru.reconnect();//重连 | ||
} | ||
var offlineHandle = function(){ | ||
sumeru.netStatus.setStatus_(STATUS_OFFLINE); | ||
sumeru.reachability.setStatus_(STATUS_OFFLINE); | ||
sumeru.closeConnect && sumeru.closeConnect();//断开连接 | ||
} | ||
//监听在线状态变化 | ||
window.addEventListener("offline", offlineHandle, false); | ||
window.addEventListener("online", onlineHandle, false); | ||
|
||
api.__reg('info', getNetworkInfo, 'publish'); | ||
api.__reg('setStatus_', setStatus_, 'publish'); | ||
api.__reg('getStatus_', getStatus_, 'publish'); | ||
|
||
} | ||
if(typeof module !='undefined' && module.exports){ | ||
// 本函数只运行在client | ||
//module.exports = runnable; | ||
}else{ | ||
runnable(sumeru); | ||
|
||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,45 +7,29 @@ | |
* @author [email protected] | ||
*/ | ||
var runnable = function(sumeru){ | ||
|
||
var STATUS_OFFLINE = 0x00; | ||
var STATUS_CONNECTING = 0x10; | ||
var STATUS_CONNECTOPEN = 0x11; | ||
var STATUS_CONNECTED = 0x100; | ||
|
||
var TYPE_WIFI = 0x01; | ||
var TYPE_3G = 0x11; | ||
var TYPE_EDGE = 0x111; | ||
var TYPE_GPRS = 0x1111; | ||
|
||
var status_ = STATUS_OFFLINE; //默认离线 | ||
var type_ = 0x00; //默认没有网络类型,暂未实现type的识别 | ||
|
||
if(sumeru.reachability){ | ||
return; | ||
} | ||
|
||
var api = sumeru.addSubPackage('reachability'); | ||
|
||
var functionstack = {}; | ||
var STATUS_OFFLINE = 0x00; | ||
var STATUS_CONNECTING = 0x10;//network online,正在尝试连接socket | ||
var STATUS_CONNECTOPEN = 0x11;//scoket 已连接,服务器正在等待客户端echo 握手 | ||
var STATUS_CONNECTED = 0x100;//cs已连接 | ||
|
||
var trigger_reachability = function(status){ | ||
if (status === STATUS_OFFLINE) { | ||
functionstack.offline && functionstack.offline(); | ||
}else if(status === STATUS_CONNECTING) { | ||
functionstack.connecting && functionstack.connecting(); | ||
}else if(status === STATUS_CONNECTOPEN) { | ||
functionstack.connectopen && functionstack.connectopen(); | ||
}else if(status === STATUS_CONNECTED) { | ||
functionstack.online && functionstack.online(); | ||
} | ||
} | ||
var setEvent = function(type,func){ | ||
functionstack[type] = func; | ||
} | ||
var status_ = STATUS_OFFLINE; //默认离线 | ||
|
||
|
||
var setStatus = function(status){ | ||
trigger_reachability(status); | ||
status_ = status; | ||
if(status_!=status){ | ||
if(status_==STATUS_CONNECTED&&status==STATUS_OFFLINE){ | ||
sumeru.eventStack._trigger('offline'); | ||
} | ||
if(status==STATUS_CONNECTED){ | ||
sumeru.eventStack._trigger('online'); | ||
} | ||
status_ = status; | ||
} | ||
return status_; | ||
}; | ||
|
||
|
@@ -57,24 +41,13 @@ var runnable = function(sumeru){ | |
api.STATUS_CONNECTING = STATUS_CONNECTING; | ||
api.STATUS_CONNECTOPEN = STATUS_CONNECTOPEN; | ||
api.STATUS_CONNECTED = STATUS_CONNECTED; | ||
|
||
//FIXME 完善在线功能,添加trigger online、offline方法。 | ||
//因为断线有两种可能,一种是与server中断(可能server故障),第二种是失去网络连接 | ||
|
||
if (typeof module =='undefined' || !module.exports) { | ||
//前端绑定 | ||
window.addEventListener("offline", function(){ | ||
sumeru.reachability.setStatus_(STATUS_OFFLINE); | ||
sumeru.closeConnect && sumeru.closeConnect();//重连 | ||
}, false); | ||
window.addEventListener("online", function(){ | ||
//trigger socket reconnect... | ||
sumeru.reconnect && sumeru.reconnect();//重连 | ||
}, false); | ||
} | ||
|
||
api.__reg('setStatus_', setStatus, 'private'); | ||
api.__reg('getStatus', getStatus, 'private'); | ||
api.__reg('setEvent', setEvent, 'private'); | ||
}; | ||
|
||
if(typeof module !='undefined' && module.exports){ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters