mirror of
https://github.com/genxium/DelayNoMore
synced 2025-10-09 00:26:39 +00:00
Added inactive watchdog hint in frontend.
This commit is contained in:
@@ -11,6 +11,7 @@ window.ALL_MAP_STATES = {
|
||||
};
|
||||
|
||||
window.ALL_BATTLE_STATES = {
|
||||
NONE: -1,
|
||||
WAITING: 0,
|
||||
IN_BATTLE: 1,
|
||||
IN_SETTLEMENT: 2,
|
||||
@@ -222,15 +223,19 @@ cc.Class({
|
||||
onDestroy() {
|
||||
const self = this;
|
||||
console.warn("+++++++ Map onDestroy()");
|
||||
if (null == self.battleState || ALL_BATTLE_STATES.WAITING == self.battleState) {
|
||||
if (null == self.battleState || ALL_BATTLE_STATES.IN_BATTLE != self.battleState) {
|
||||
window.clearBoundRoomIdInBothVolatileAndPersistentStorage();
|
||||
}
|
||||
if (null != window.handleBattleColliderInfo) {
|
||||
window.handleBattleColliderInfo = null;
|
||||
}
|
||||
if (null != window.handleClientSessionError) {
|
||||
window.handleClientSessionError = null;
|
||||
}
|
||||
},
|
||||
|
||||
onManualRejoinRequired(labelString) {
|
||||
const self = this;
|
||||
self.battleState = ALL_BATTLE_STATES.NONE; // Effectively stops "update(dt)"
|
||||
self.showPopupInCanvas(self.gameRuleNode);
|
||||
self.popupSimplePressToGo(labelString, false);
|
||||
},
|
||||
|
||||
popupSimplePressToGo(labelString, hideYesButton) {
|
||||
@@ -334,16 +339,6 @@ cc.Class({
|
||||
self.showCriticalCoordinateLabels = false;
|
||||
|
||||
console.warn("+++++++ Map onLoad()");
|
||||
window.handleClientSessionError = function() {
|
||||
console.warn('+++++++ Common handleClientSessionError()');
|
||||
|
||||
if (ALL_BATTLE_STATES.IN_SETTLEMENT == self.battleState) {
|
||||
console.log("Battled ended by settlement");
|
||||
} else {
|
||||
console.warn("Connection lost, going back to login page");
|
||||
window.clearLocalStorageAndBackToLoginScene(true);
|
||||
}
|
||||
};
|
||||
|
||||
const mapNode = self.node;
|
||||
const canvasNode = mapNode.parent;
|
||||
@@ -759,6 +754,8 @@ cc.Class({
|
||||
if (ALL_BATTLE_STATES.IN_BATTLE != self.battleState) {
|
||||
return;
|
||||
}
|
||||
window.closeWSConnection(constants.RET_CODE.BATTLE_STOPPED);
|
||||
self.battleState = ALL_BATTLE_STATES.IN_SETTLEMENT;
|
||||
self.countdownNanos = null;
|
||||
self.logBattleStats();
|
||||
if (self.musicEffectManagerScriptIns) {
|
||||
@@ -769,7 +766,6 @@ cc.Class({
|
||||
const resultPanelScriptIns = resultPanelNode.getComponent("ResultPanel");
|
||||
resultPanelScriptIns.showPlayerInfo(self.playerRichInfoDict);
|
||||
window.clearBoundRoomIdInBothVolatileAndPersistentStorage();
|
||||
self.battleState = ALL_BATTLE_STATES.IN_SETTLEMENT;
|
||||
self.showPopupInCanvas(resultPanelNode);
|
||||
|
||||
// Clear player info
|
||||
@@ -945,6 +941,7 @@ cc.Class({
|
||||
|
||||
showPopupInCanvas(toShowNode) {
|
||||
const self = this;
|
||||
toShowNode.active = true;
|
||||
self.disableInputControls();
|
||||
self.transitToState(ALL_MAP_STATES.SHOWING_MODAL_POPUP);
|
||||
safelyAddChild(self.widgetsAboveAllNode, toShowNode);
|
||||
|
@@ -12,7 +12,6 @@ window.DOWNSYNC_MSG_ACT_INPUT_BATCH = 2;
|
||||
window.DOWNSYNC_MSG_ACT_BATTLE_STOPPED = 3;
|
||||
window.DOWNSYNC_MSG_ACT_FORCED_RESYNC = 4;
|
||||
|
||||
|
||||
window.sendSafely = function(msgStr) {
|
||||
/**
|
||||
* - "If the data can't be sent (for example, because it needs to be buffered but the buffer is full), the socket is closed automatically."
|
||||
@@ -28,10 +27,13 @@ window.sendUint8AsBase64Safely = function(msgUint8Arr) {
|
||||
window.clientSession.send(_uint8ToBase64(msgUint8Arr));
|
||||
}
|
||||
|
||||
window.closeWSConnection = function() {
|
||||
if (null == window.clientSession || window.clientSession.readyState != WebSocket.OPEN) return;
|
||||
window.closeWSConnection = function(code, reason) {
|
||||
if (null == window.clientSession || window.clientSession.readyState != WebSocket.OPEN) {
|
||||
console.log(`"window.clientSession" is already closed or destroyed.`);
|
||||
return;
|
||||
}
|
||||
console.log(`Closing "window.clientSession" from the client-side.`);
|
||||
window.clientSession.close();
|
||||
window.clientSession.close(code, reason);
|
||||
}
|
||||
|
||||
window.getBoundRoomIdFromPersistentStorage = function() {
|
||||
@@ -184,39 +186,33 @@ window.initPersistentSessionClient = function(onopenCb, expectedRoomId) {
|
||||
|
||||
clientSession.onerror = function(evt) {
|
||||
console.error("Error caught on the WS clientSession: ", evt);
|
||||
if (window.handleClientSessionError) {
|
||||
window.handleClientSessionError();
|
||||
}
|
||||
window.clearLocalStorageAndBackToLoginScene(true);
|
||||
};
|
||||
|
||||
clientSession.onclose = function(evt) {
|
||||
// [WARNING] The callback "onclose" might be called AFTER the webpage is refreshed with "1001 == evt.code".
|
||||
console.warn("The WS clientSession is closed: ", evt, clientSession);
|
||||
if (false == evt.wasClean) {
|
||||
/*
|
||||
Chrome doesn't allow the use of "CustomCloseCode"s (yet) and will callback with a "WebsocketStdCloseCode 1006" and "false == evt.wasClean" here. See https://tools.ietf.org/html/rfc6455#section-7.4 for more information.
|
||||
*/
|
||||
if (window.handleClientSessionError) {
|
||||
window.handleClientSessionError();
|
||||
}
|
||||
} else {
|
||||
switch (evt.code) {
|
||||
case constants.RET_CODE.PLAYER_NOT_ADDABLE_TO_ROOM:
|
||||
case constants.RET_CODE.PLAYER_NOT_READDABLE_TO_ROOM:
|
||||
window.clearBoundRoomIdInBothVolatileAndPersistentStorage();
|
||||
break;
|
||||
case constants.RET_CODE.UNKNOWN_ERROR:
|
||||
case constants.RET_CODE.MYSQL_ERROR:
|
||||
case constants.RET_CODE.PLAYER_NOT_FOUND:
|
||||
case constants.RET_CODE.PLAYER_CHEATING:
|
||||
case 1006: // Peer(i.e. the backend) gone unexpectedly
|
||||
if (window.handleClientSessionError) {
|
||||
window.handleClientSessionError();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
console.warn(`The WS clientSession is closed: evt=${JSON.stringify(evt)}, evt.code=${evt.code}`);
|
||||
switch (evt.code) {
|
||||
case constants.RET_CODE.BATTLE_STOPPED:
|
||||
// deliberately do nothing
|
||||
break;
|
||||
case constants.RET_CODE.PLAYER_NOT_ADDABLE_TO_ROOM:
|
||||
case constants.RET_CODE.PLAYER_NOT_READDABLE_TO_ROOM:
|
||||
window.clearBoundRoomIdInBothVolatileAndPersistentStorage(); // To favor the player to join other rooms
|
||||
mapIns.onManualRejoinRequired("Couldn't join any room at the moment, please retry");
|
||||
break;
|
||||
case constants.RET_CODE.ACTIVE_WATCHDOG:
|
||||
mapIns.onManualRejoinRequired("Disconnected due to long-time inactivity, please rejoin");
|
||||
break;
|
||||
case constants.RET_CODE.UNKNOWN_ERROR:
|
||||
case constants.RET_CODE.MYSQL_ERROR:
|
||||
case constants.RET_CODE.PLAYER_NOT_FOUND:
|
||||
case constants.RET_CODE.PLAYER_CHEATING:
|
||||
case 1006: // Peer(i.e. the backend) gone unexpectedly
|
||||
window.clearLocalStorageAndBackToLoginScene(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -227,19 +223,7 @@ window.clearLocalStorageAndBackToLoginScene = function(shouldRetainBoundRoomIdIn
|
||||
if (window.mapIns && window.mapIns.musicEffectManagerScriptIns) {
|
||||
window.mapIns.musicEffectManagerScriptIns.stopAllMusic();
|
||||
}
|
||||
/**
|
||||
* Here I deliberately removed the callback in the "common `handleClientSessionError` callback"
|
||||
* within which another invocation to `clearLocalStorageAndBackToLoginScene` will be made.
|
||||
*
|
||||
* It'll be re-assigned to the common one upon reentrance of `Map.onLoad`.
|
||||
*
|
||||
* -- YFLu 2019-04-06
|
||||
*/
|
||||
window.handleClientSessionError = () => {
|
||||
console.warn("+++++++ Special handleClientSessionError() assigned within `clearLocalStorageAndBackToLoginScene`");
|
||||
// TBD.
|
||||
window.handleClientSessionError = null; // To ensure that it's called at most once.
|
||||
};
|
||||
|
||||
window.closeWSConnection();
|
||||
window.clearSelfPlayer();
|
||||
if (true != shouldRetainBoundRoomIdInBothVolatileAndPersistentStorage) {
|
||||
|
Reference in New Issue
Block a user