Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 60 additions & 25 deletions src/themes/smalltalk.view
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,18 @@
$('#messages').append($li);
$('#list').animate({scrollTop: $('#messages').height()}, 'fast');
break;
case 'session-timeout':
$li = $("<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 />");
$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;
Expand All @@ -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 />");
$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 />");
$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);
});
Expand All @@ -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);
}
});
}
}
Expand Down Expand Up @@ -630,7 +665,7 @@
<input id="attachment" name="attachment" type="file" class="file-loading btn-default" multiple="true" />
<br />
<input type="button" id="button" value="Send" class="btn btn-primary" />
<!--<input type="button" id="test" value="Test" class="btn btn-secondary" />-->
<input type="button" id="test" value="Test" class="btn btn-secondary" />
</form>
</div>

Expand Down Expand Up @@ -673,7 +708,7 @@

<footer class="footer">
<div class="container">
<p class="text-muted"> © 2016 </p>
<p class="text-muted"> © 2017 </p>
</div>
</footer>

Expand Down
74 changes: 49 additions & 25 deletions src/tinystruct/examples/smalltalk.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public String command() {

return this.save(meetingCode, builder);
}

response.setStatus(403);
return "{ \"error\": \"expired\" }";
}

Expand All @@ -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 {
Expand All @@ -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 {
Expand Down Expand Up @@ -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<Builder> messages;
List<String> 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();
}

Expand Down