Add server announcements

This commit is contained in:
Charles Gould 2017-01-04 19:27:32 -05:00
parent faf3b85638
commit b21f118600
3 changed files with 17 additions and 1 deletions

View File

@ -2,6 +2,8 @@ package lingo.client.api;
public class StompTopics { public class StompTopics {
public static final String CHAT = createTopicName("chat");
public static final String OPPONENT_JOINED = createTopicName("opponentJoined"); public static final String OPPONENT_JOINED = createTopicName("opponentJoined");
public static final String OPPONENT_LEFT = createTopicName("opponentLeft"); public static final String OPPONENT_LEFT = createTopicName("opponentLeft");

View File

@ -89,6 +89,7 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
public void join(String username, @Header(SESSION_ID_HEADER) String sessionId) { public void join(String username, @Header(SESSION_ID_HEADER) String sessionId) {
log.info("Player joined: {}, {}", sessionId, username); log.info("Player joined: {}, {}", sessionId, username);
usernameBySession.put(sessionId, username); usernameBySession.put(sessionId, username);
sendAnnouncement(username + " joined");
joinWaitingList(sessionId); joinWaitingList(sessionId);
} }
@ -102,7 +103,10 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
} }
private void leave(String sessionId) { private void leave(String sessionId) {
usernameBySession.remove(sessionId); final String username = usernameBySession.remove(sessionId);
if (username != null) {
sendAnnouncement(username + " left");
}
final Game game = gameBySession.remove(sessionId); final Game game = gameBySession.remove(sessionId);
if (game == null) { if (game == null) {
leaveWaitingList(sessionId); leaveWaitingList(sessionId);
@ -180,6 +184,12 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
sendToUser(sessionId, StompTopics.PRACTICE_REPORTS, report); sendToUser(sessionId, StompTopics.PRACTICE_REPORTS, report);
} }
private void sendAnnouncement(String message) {
final String source = "[Server]";
final ChatMessage payload = new ChatMessage(source, message);
messagingTemplate.convertAndSend(StompTopics.CHAT, payload);
}
private void sendToUser(String user, String destination, Object payload) { private void sendToUser(String user, String destination, Object payload) {
// TODO: cache the headers? // TODO: cache the headers?
final SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); final SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
@ -222,6 +232,7 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
final String[] playerTwoMessage = new String[] { firstLetter, playerOneUsername }; final String[] playerTwoMessage = new String[] { firstLetter, playerOneUsername };
sendToUser(playerOne, StompTopics.OPPONENT_JOINED, playerOneMessage); sendToUser(playerOne, StompTopics.OPPONENT_JOINED, playerOneMessage);
sendToUser(playerTwo, StompTopics.OPPONENT_JOINED, playerTwoMessage); sendToUser(playerTwo, StompTopics.OPPONENT_JOINED, playerTwoMessage);
sendAnnouncement(playerOneUsername + " is playing against " + playerTwoUsername);
} }
} }
} }

View File

@ -137,6 +137,9 @@ function addChatMessage(sender, body) {
chatMessage.appendChild(usernameNode); chatMessage.appendChild(usernameNode);
chatMessage.appendChild(messageTextNode); chatMessage.appendChild(messageTextNode);
messageList.appendChild(chatMessage); messageList.appendChild(chatMessage);
// Auto-scroll if necessary
messageList.scrollTop = messageList.scrollHeight;
} }
function drawMyBoard() { function drawMyBoard() {