diff --git a/src/themes/smalltalk.view b/src/themes/smalltalk.view index 3557373..7d67733 100644 --- a/src/themes/smalltalk.view +++ b/src/themes/smalltalk.view @@ -347,6 +347,18 @@ $('#messages').append($li); $('#list').animate({scrollTop: $('#messages').height()}, 'fast'); break; + case 'session-timeout': + $li = $("
  • "); + $li.html("System Notification:\t" + $data.user + " left from this conversation."); + $('#messages').append($li); + $('#list').animate({scrollTop: $('#messages').height()}, 'fast'); + break; + case 'expired': + $li = $("
  • "); + $li.html("System Notification:\tIt's an expired conversation, you have to refresh the current page or request a new meeting code."); + $('#messages').append($li); + $('#list').animate({scrollTop: $('#messages').height()}, 'fast'); + break; default: timer.setAction(function(){ document.title = $_user + " is typing" + dotted; @@ -369,26 +381,40 @@ data: { cmd: cmd } }).done(function( msg ) { if(msg.error == "missing user") { - if (user) { - $.ajax({ - type: "POST", - url: "[%LINK:talk/start%]/"+ user - }).done(function( msg ) {}); - } - else { - $("#modal").modal(); - } - } - - if(msg.error == "expired") { - if(confirm("The conversation is expired, Do you want to reload the conversation?")) { - $.ajax({ - type: "POST", - url: $('#link').text() - }).done(function( msg ) {}); - } - } + if (user) { + $.ajax({ + type: "POST", + url: "[%LINK:talk/start%]/"+ user + }).done(function( msg ) {}); + } + else { + $("#modal").modal(); + } + } }).fail(function( msg ) { + switch(msg.responseJSON.error) { + case 'session-timeout': + $li = $("
  • "); + $li.html("System Notification:\t" + $data.user + " left from this conversation."); + $('#messages').append($li); + $('#list').animate({scrollTop: $('#messages').height()}, 'fast'); + + if(confirm("Your session is timed out, Do you want to reload the conversation?")) { + $.ajax({ + type: "POST", + url: $('#link').text() + }).done(function( msg ) {}); + } + break; + case 'expired': + $li = $("
  • "); + $li.html("System Notification:\tIt's an expired conversation, you have to refresh the current page or request a new meeting code."); + $('#messages').append($li); + $('#list').animate({scrollTop: $('#messages').height()}, 'fast'); + break; + default:break; + } + console.log('Fail.'); console.log(msg); }); @@ -413,13 +439,22 @@ $.getJSON( "[%LINK:talk/update%]/{%meeting_code%}/{%session_id%}", function(data) { update(data); is_running = false; - }).done(function() { + }).done(function( msg ) { autoupdate(); is_running = false; }).fail(function( msg ) { - connection_timer.start(); - is_running = false; - console.log(msg); + msg = msg.responseJSON; + if(msg.error == "expired") { + command("expired"); + } + else if(msg.error == "session-timeout") { + command("session-timeout"); + } + else { + connection_timer.start(); + is_running = false; + console.log(msg); + } }); } } @@ -630,7 +665,7 @@
    - + @@ -673,7 +708,7 @@ diff --git a/src/tinystruct/examples/smalltalk.java b/src/tinystruct/examples/smalltalk.java index d05d472..65b81b0 100644 --- a/src/tinystruct/examples/smalltalk.java +++ b/src/tinystruct/examples/smalltalk.java @@ -163,7 +163,7 @@ public String command() { return this.save(meetingCode, builder); } - + response.setStatus(403); return "{ \"error\": \"expired\" }"; } @@ -173,25 +173,28 @@ public String save() { response.setContentType("application/json"); final Object meetingCode = request.getSession().getAttribute("meeting_code"); - final String sessionId = request.getSession().getId(); - if ( meetingCode != null && sessions.get(meetingCode) != null && sessions.get(meetingCode).contains(sessionId)) { - String message; - if ((message = request.getParameter("text")) != null && !message.isEmpty()) { - String[] agent = request.getHeader("User-Agent").split(" "); - this.setVariable("browser", agent[agent.length - 1]); - - final SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d h:m:s"); - final Builder builder = new Builder(); - builder.put("user", request.getSession().getAttribute("user")); - builder.put("time", format.format(new Date())); - builder.put("message", filter(message)); - builder.put("session_id", sessionId); - - return this.save(meetingCode, builder); + if (this.meetings.containsKey(meetingCode)) { + final String sessionId = request.getSession().getId(); + if ( meetingCode != null && sessions.get(meetingCode) != null && sessions.get(meetingCode).contains(sessionId)) { + String message; + if ((message = request.getParameter("text")) != null && !message.isEmpty()) { + String[] agent = request.getHeader("User-Agent").split(" "); + this.setVariable("browser", agent[agent.length - 1]); + + final SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d h:m:s"); + final Builder builder = new Builder(); + builder.put("user", request.getSession().getAttribute("user")); + builder.put("time", format.format(new Date())); + builder.put("message", filter(message)); + builder.put("session_id", sessionId); + + return this.save(meetingCode, builder); + } } } - - return "{}"; + + response.setStatus(403); + return "{ \"error\": \"expired\" }"; } public String update() throws ApplicationException, IOException { @@ -201,14 +204,27 @@ public String update() throws ApplicationException, IOException { if (meetingCode != null) { return this.update(meetingCode.toString(), sessionId); } - return ""; + final HttpServletResponse response = (HttpServletResponse) this.context.getAttribute("HTTP_RESPONSE"); + response.setContentType("application/json"); + response.setStatus(403); + return "{ \"error\": \"expired\" }"; } public String update(String meetingCode, String sessionId) throws ApplicationException, IOException { - if (sessions.get(meetingCode) != null && sessions.get(meetingCode).contains(sessionId)) { - return this.update(sessionId); + if (this.meetings.containsKey(meetingCode)) { + if(sessions.get(meetingCode) != null && sessions.get(meetingCode).contains(sessionId)) { + return this.update(sessionId); + } + final HttpServletResponse response = (HttpServletResponse) this.context.getAttribute("HTTP_RESPONSE"); + response.setContentType("application/json"); + response.setStatus(403); + return "{ \"error\": \"session-timeout\" }"; } - return ""; + + final HttpServletResponse response = (HttpServletResponse) this.context.getAttribute("HTTP_RESPONSE"); + response.setContentType("application/json"); + response.setStatus(403); + return "{ \"error\": \"expired\" }"; } public String upload() throws ApplicationException { @@ -307,16 +323,24 @@ public void sessionCreated(HttpSessionEvent arg0) { public void sessionDestroyed(HttpSessionEvent arg0) { Object meetingCode = arg0.getSession().getAttribute("meeting_code"); if ( meetingCode != null ) { + final SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d h:m:s"); + final Builder builder = new Builder(); + builder.put("user", null); + builder.put("time", format.format(new Date())); + builder.put("cmd", "expired"); + this.save(meetingCode, builder); + Queue messages; List session_ids; - synchronized (meetings) { - if((session_ids = this.sessions.get(meetingCode)) != null) - { + synchronized (meetings) { + if((session_ids = this.sessions.get(meetingCode)) != null) { session_ids.remove(arg0.getSession().getId()); } + if ((messages = meetings.get(meetingCode)) != null) { messages.remove(meetingCode); } + meetings.notifyAll(); }