Mercurial > hg > rlgwebd
comparison rlgwebd.js @ 132:823e878e5840
Logins don't time out anymore.
No more login timestamps either.
author | John "Elwin" Edwards <elwin@sdf.org> |
---|---|
date | Wed, 12 Sep 2012 15:48:41 -0700 |
parents | 3e3824711791 |
children | dcd07c1d846a |
comparison
equal
deleted
inserted
replaced
131:f8c89e1ed33a | 132:823e878e5840 |
---|---|
465 var lkey = wsReq.resourceURL.query["key"]; | 465 var lkey = wsReq.resourceURL.query["key"]; |
466 if (!(lkey in logins)) { | 466 if (!(lkey in logins)) { |
467 wsReq.reject(404, errorcodes[1]); | 467 wsReq.reject(404, errorcodes[1]); |
468 return; | 468 return; |
469 } | 469 } |
470 logins[lkey].ts = new Date(); | |
471 var pname = logins[lkey].name; | 470 var pname = logins[lkey].name; |
472 var dims = [wsReq.resourceURL.query.h, wsReq.resourceURL.query.w]; | 471 var dims = [wsReq.resourceURL.query.h, wsReq.resourceURL.query.w]; |
473 function progcallback(err, fname) { | 472 function progcallback(err, fname) { |
474 if (fname) { | 473 if (fname) { |
475 wsReq.reject(404, errorcodes[4]); | 474 wsReq.reject(404, errorcodes[4]); |
640 tslog("Reaping session %s", session.sessid); | 639 tslog("Reaping session %s", session.sessid); |
641 /* Dissociate it with its login name. */ | 640 /* Dissociate it with its login name. */ |
642 var sn = logins[session.key].sessions.indexOf(session.sessid); | 641 var sn = logins[session.key].sessions.indexOf(session.sessid); |
643 if (sn >= 0) { | 642 if (sn >= 0) { |
644 logins[session.key].sessions.splice(sn, 1); | 643 logins[session.key].sessions.splice(sn, 1); |
645 if (now - logins[session.key].ts > playtimeout) | |
646 logins[session.key].ts = new Date(now - playtimeout); | |
647 } | 644 } |
648 /* Shut it down. */ | 645 /* Shut it down. */ |
649 session.close(); | 646 session.close(); |
650 } | 647 } |
651 }); | 648 }); |
652 } | 649 } |
653 for (var sessid in sessions) { | 650 for (var sessid in sessions) { |
654 reapcheck(sessions[sessid]); | 651 reapcheck(sessions[sessid]); |
655 } | 652 } |
656 /* HELPME this is about as clever as I can code, so I can't tell whether | |
657 * there are any bugs. */ | |
658 for (var lkey in logins) { | 653 for (var lkey in logins) { |
659 if (logins[lkey].sessions.length == 0) { | 654 if (logins[lkey].sessions.length > 0) { |
660 /* A login with no current games can be killed for inactivity. */ | 655 /* Check for games that have terminated normally, and remove them. */ |
661 if (now - logins[lkey].ts > playtimeout * 4) { | |
662 tslog("Login for %s (key %s) timed out", logins[lkey].name, lkey); | |
663 delete logins[lkey]; | |
664 } | |
665 } | |
666 else { | |
667 /* Check for games that have terminated normally, and update | |
668 * the timestamp. */ | |
669 var expired = []; | 656 var expired = []; |
670 var targarray = logins[lkey].sessions; | 657 var targarray = logins[lkey].sessions; |
671 /* Let's not find out what happens if you modify an array | 658 /* Let's not find out what happens if you modify an array |
672 * you're iterating through. */ | 659 * you're iterating through. */ |
673 for (var i = 0; i < targarray.length; i++) { | 660 for (var i = 0; i < targarray.length; i++) { |
674 if (!(targarray[i] in sessions)) | 661 if (!(targarray[i] in sessions)) |
675 expired.push(targarray[i]); | 662 expired.push(targarray[i]); |
676 } | 663 } |
677 if (expired.length > 0) { | 664 if (expired.length > 0) { |
678 logins[lkey].ts = new Date(now); | |
679 for (var j = 0; j < expired.length; j++) { | 665 for (var j = 0; j < expired.length; j++) { |
680 targarray.splice(targarray.indexOf(expired[j]), 1); | 666 targarray.splice(targarray.indexOf(expired[j]), 1); |
681 } | 667 } |
682 } | 668 } |
683 } | 669 } |
744 } | 730 } |
745 var lkey = String(formdata["key"]); | 731 var lkey = String(formdata["key"]); |
746 if (!(lkey in logins)) { | 732 if (!(lkey in logins)) { |
747 sendError(res, 1, null); | 733 sendError(res, 1, null); |
748 return; | 734 return; |
749 } | |
750 else { | |
751 logins[lkey].ts = new Date(); | |
752 } | 735 } |
753 var username = logins[lkey].name; | 736 var username = logins[lkey].name; |
754 var gname = formdata["game"]; | 737 var gname = formdata["game"]; |
755 // If dims are not given or invalid, the constructor will handle it. | 738 // If dims are not given or invalid, the constructor will handle it. |
756 var dims = [formdata["h"], formdata["w"]]; | 739 var dims = [formdata["h"], formdata["w"]]; |
908 function stopgame(res, formdata) { | 891 function stopgame(res, formdata) { |
909 if (!("key" in formdata) || !(formdata["key"] in logins)) { | 892 if (!("key" in formdata) || !(formdata["key"] in logins)) { |
910 sendError(res, 1); | 893 sendError(res, 1); |
911 return; | 894 return; |
912 } | 895 } |
913 /* Update timestamp, because this is an authenticated action. */ | |
914 logins[formdata["key"]].ts = new Date(); | |
915 var pname = logins[formdata["key"]].name; | 896 var pname = logins[formdata["key"]].name; |
916 if (!("g" in formdata) || !(formdata["g"] in games)) { | 897 if (!("g" in formdata) || !(formdata["g"] in games)) { |
917 sendError(res, 2, "No such game."); | 898 sendError(res, 2, "No such game."); |
918 return; | 899 return; |
919 } | 900 } |