WebSocketを用いてチャットをおこないたいと考えております。
JavaとJavaScriptでやりとりの処理を書いております。
現状は、一人がメッセージを送信すると、
WebSocketに接続されている人
全員に反映されてしまっています。
コードを見てもOnOpenしたsessionid全てに対して、
OnMessageで送信しているのは明らかなのですが、
どのように対象を定めればいいのか検討がついておりません。
何卒お力添えのほどよろしくお願いいたします。
下記がJavaとJavaScriptのソースコードになります。
Java
1public class WebSocketEndpointAction{ 2 public static Queue<Session> sessions = new ConcurrentLinkedQueue<Session>(); 3 private HttpSession httpSession; 4 private String sessionid; 5 6 @OnOpen 7 public void onOpen(Session session , EndpointConfig config) { 8 // 開始時 9 sessions.add(session); 10 this.httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName()); 11 sessionid = httpSession.getId(); 12 } 13 14 15 @OnMessage 16 public void onMessage(String message , Session sessionID) throws IOException, ServletException { 17 // クライアントからの受信時 18 MessageDao messagedao = new MessageDao(); 19 try{ 20 messagedao.connect(); 21 int userid = messagedao.selectSessionID(sessionid).getUserid(); 22 int roomid = messagedao.selectSessionID(sessionid).getRoomid(); 23 messagedao.insertMessage(userid, roomid, message); 24 messagedao.close(); 25 }catch(Exception e){ 26 e.printStackTrace(); 27 } 28 for (Session session : sessions) { 29 session.getBasicRemote().sendText("{\"command\":\"message\", \"text\": \"" + message.replace("\\", "\\\\").replace("\"", "\\\"") + "\" , \"sessionid\": \"" + sessionid + "\"}"); 30 } 31 }
JavaScript
1var webSocket; 2window.onload = function() { 3 var forRtoA = document.createElement('a'); 4 forRtoA.href = "loadMessage"; 5 webSocket = new WebSocket(forRtoA.href.replace("http://", "ws://").replace("https://", "wss://")); 6 var messageArea = document.getElementById("message-list"); 7 var sessionid = document.getElementById("sessionID").value; 8 var photo = document.getElementById("yourphoto").value; 9 10 var appendMessage = function(value, session) { 11 var messageElement = document.createElement("message-list"); 12 var time = new Date(); 13 var month = time.getMonth() + 1; 14 if(month < 10) { month = "0" + month; } 15 var day = time.getDate(); 16 if(day < 10) { day = "0" + day; } 17 var hour = time.getHours(); 18 if(hour < 10) { hour = "0" + hour; } 19 var minute = time.getMinutes(); 20 if(minute < 10) { minute = "0" + minute; } 21 var now = month + "/" + day + " " + hour + ":" + minute; 22 if(session == sessionid){ 23 messageElement.innerHTML = '<li class="msg_send"><div class="inner-box"><p class="balloon_right" id="messageArea">' + value + '</p></div></li><p class="time_send text10">' + now + '</p>'; 24 }else{ 25 messageElement.innerHTML = '<li class="msg_recieve"><a><img src="' + photo + '" alt="メッセージ相手写真" class="c-message_photo img-circle c-photo_mini"></a><div class="inner-box2"><p class="balloon_left">' + value + '</p></div></li><p class="time_recieve text10">' + now + '</p>'; 26 } 27 messageArea.appendChild(messageElement); 28 var message_box = document.getElementById("message_box"); 29 message_box.scrollTop = message_box.scrollHeight; 30 } 31 32 webSocket.onmessage = function(message) { 33 var data = JSON.parse(message.data); 34 appendMessage(data.text, data.sessionid); 35 } 36 37 var messageInput = document.getElementById("c-btn_chenge"); 38 var messageText = document.getElementById("messageInput"); 39 messageText.onkeypress = function(e) { 40 if (13 == e.keyCode) { 41 var message = messageText.value; 42 if (webSocket && "" != message) { 43 webSocket.send(message); 44 messageText.value = ""; 45 return false; 46 } 47 } 48 } 49 50 messageInput.onclick = function() { 51 var message = messageText.value; 52 if (webSocket && "" != message) { 53 webSocket.send(message); 54 messageText.value = ""; 55 } 56 } 57}
何卒、よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。