|
@@ -1,7 +1,11 @@
|
|
package com.yanzhenjie.andserver.sample.websocket;
|
|
package com.yanzhenjie.andserver.sample.websocket;
|
|
|
|
|
|
|
|
+import android.os.Build;
|
|
|
|
+import android.util.Log;
|
|
|
|
+
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.yanzhenjie.andserver.http.session.Session;
|
|
import com.yanzhenjie.andserver.http.session.Session;
|
|
|
|
+import com.yanzhenjie.andserver.sample.util.Result;
|
|
|
|
|
|
|
|
|
|
import org.java_websocket.WebSocket;
|
|
import org.java_websocket.WebSocket;
|
|
@@ -9,6 +13,7 @@ import org.java_websocket.handshake.ClientHandshake;
|
|
import org.java_websocket.server.WebSocketServer;
|
|
import org.java_websocket.server.WebSocketServer;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.util.Objects;
|
|
import java.util.Timer;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
import java.util.TimerTask;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
@@ -23,6 +28,7 @@ import org.java_websocket.server.WebSocketServer;
|
|
|
|
|
|
public class SocketServer extends WebSocketServer {
|
|
public class SocketServer extends WebSocketServer {
|
|
|
|
|
|
|
|
+ private final String TAG = "SocketServer";
|
|
private static ConcurrentHashMap<String,WebSocket> webSocketMap = new ConcurrentHashMap<>();
|
|
private static ConcurrentHashMap<String,WebSocket> webSocketMap = new ConcurrentHashMap<>();
|
|
// private static SocketServer instance = null;
|
|
// private static SocketServer instance = null;
|
|
public SocketServer(InetSocketAddress address) {
|
|
public SocketServer(InetSocketAddress address) {
|
|
@@ -43,6 +49,11 @@ public class SocketServer extends WebSocketServer {
|
|
public void onOpen(WebSocket conn, ClientHandshake handshake) {
|
|
public void onOpen(WebSocket conn, ClientHandshake handshake) {
|
|
conn.send("Welcome to the server!"); //This method sends a message to the new client
|
|
conn.send("Welcome to the server!"); //This method sends a message to the new client
|
|
webSocketMap.put(handshake.getResourceDescriptor(), conn);
|
|
webSocketMap.put(handshake.getResourceDescriptor(), conn);
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
|
|
|
+ webSocketMap.keySet().forEach(key ->{
|
|
|
|
+ Log.d(TAG, key+"="+key+"&&&&&&&&&&&&&value="+webSocketMap.get(key));
|
|
|
|
+ });
|
|
|
|
+ }
|
|
System.out.println("open----socketMap.size="+webSocketMap.size());
|
|
System.out.println("open----socketMap.size="+webSocketMap.size());
|
|
broadcast( "new connection: " + handshake.getResourceDescriptor() ); //This method sends a message to all clients connected
|
|
broadcast( "new connection: " + handshake.getResourceDescriptor() ); //This method sends a message to all clients connected
|
|
System.out.println("new connection to " + conn.getRemoteSocketAddress());
|
|
System.out.println("new connection to " + conn.getRemoteSocketAddress());
|
|
@@ -56,11 +67,22 @@ public class SocketServer extends WebSocketServer {
|
|
@Override
|
|
@Override
|
|
public void onMessage(WebSocket conn, String message) {
|
|
public void onMessage(WebSocket conn, String message) {
|
|
System.out.println("received message from " + conn.getRemoteSocketAddress() + ": " + message);
|
|
System.out.println("received message from " + conn.getRemoteSocketAddress() + ": " + message);
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(message.toString());
|
|
|
|
+ String toHandshake = jsonObject.getString("toHandshake");
|
|
|
|
+ if (!toHandshake.startsWith("/")){
|
|
|
|
+ toHandshake = "/"+toHandshake;
|
|
|
|
+ }
|
|
|
|
+ WebSocket webSocket = webSocketMap.get(toHandshake);
|
|
|
|
+ Log.d(TAG, "message===="+jsonObject.getString("message"));
|
|
|
|
+ webSocket.send(jsonObject.getString("message"));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void onMessage( WebSocket conn, ByteBuffer message ) {
|
|
public void onMessage( WebSocket conn, ByteBuffer message ) {
|
|
System.out.println("received ByteBuffer from " + conn.getRemoteSocketAddress());
|
|
System.out.println("received ByteBuffer from " + conn.getRemoteSocketAddress());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// Objects.requireNonNull(webSocketMap.get(toHandshake)).send(jsonObject.getString("message"));
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -73,8 +95,21 @@ public class SocketServer extends WebSocketServer {
|
|
System.out.println("server started successfully");
|
|
System.out.println("server started successfully");
|
|
}
|
|
}
|
|
|
|
|
|
- public void sendMessage(){
|
|
|
|
|
|
+ public JSONObject sendMessage(String handshake, String message){
|
|
|
|
+ JSONObject resultJson = new JSONObject();
|
|
System.out.println("send Message invoked : socketMap.size="+ webSocketMap.size());
|
|
System.out.println("send Message invoked : socketMap.size="+ webSocketMap.size());
|
|
|
|
+ Log.d(TAG, "send message invoke :handshake = "+handshake+" and message = " +message);
|
|
|
|
+ WebSocket webSocket = webSocketMap.get(handshake);
|
|
|
|
+ if(webSocket == null){
|
|
|
|
+ Log.d(TAG, "Target socket client "+handshake +" is not exists or offline ");
|
|
|
|
+ resultJson.put("result", false);
|
|
|
|
+ resultJson.put("message", "Target socket client "+handshake +" is not exists or offline ");
|
|
|
|
+ }else {
|
|
|
|
+ webSocket.send(message);
|
|
|
|
+ resultJson.put("result", true);
|
|
|
|
+ resultJson.put("message", "success");
|
|
|
|
+ }
|
|
|
|
+ return resultJson;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|