This commit is contained in:
@@ -30,13 +30,6 @@ public @interface RestOnMessage {
|
|||||||
*/
|
*/
|
||||||
String name();
|
String name();
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否为二进制消息, 默认为文本消息
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
boolean isBinary() default false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注描述
|
* 备注描述
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -37,6 +37,13 @@ public @interface RestWebSocket {
|
|||||||
*/
|
*/
|
||||||
String catalog() default "";
|
String catalog() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为二进制消息, 默认为文本消息
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
boolean binary() default false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否单用户单连接, 默认单用户单连接
|
* 是否单用户单连接, 默认单用户单连接
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import java.util.concurrent.*;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.redkale.convert.Convert;
|
import org.redkale.convert.Convert;
|
||||||
import org.redkale.convert.json.JsonConvert;
|
|
||||||
import org.redkale.net.*;
|
import org.redkale.net.*;
|
||||||
import org.redkale.util.Comment;
|
import org.redkale.util.Comment;
|
||||||
|
|
||||||
@@ -81,7 +80,9 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
|
|
||||||
String _remoteAddr;//不可能为空
|
String _remoteAddr;//不可能为空
|
||||||
|
|
||||||
JsonConvert _jsonConvert; //不可能为空
|
Convert _textConvert; //不可能为空
|
||||||
|
|
||||||
|
Convert _binaryConvert; //可能为空
|
||||||
|
|
||||||
java.lang.reflect.Type _messageTextType; //不可能为空
|
java.lang.reflect.Type _messageTextType; //不可能为空
|
||||||
|
|
||||||
@@ -137,7 +138,7 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
} else if (message instanceof WebSocketPacket) {
|
} else if (message instanceof WebSocketPacket) {
|
||||||
return sendPacket((WebSocketPacket) message);
|
return sendPacket((WebSocketPacket) message);
|
||||||
} else {
|
} else {
|
||||||
return sendPacket(new WebSocketPacket(_jsonConvert, json, last));
|
return sendPacket(new WebSocketPacket(_textConvert, json, last));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -146,7 +147,7 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
} else if (message instanceof WebSocketPacket) {
|
} else if (message instanceof WebSocketPacket) {
|
||||||
return sendPacket((WebSocketPacket) message);
|
return sendPacket((WebSocketPacket) message);
|
||||||
} else {
|
} else {
|
||||||
return sendPacket(new WebSocketPacket(_jsonConvert, message, last));
|
return sendPacket(new WebSocketPacket(_textConvert, message, last));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,9 +174,9 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
*/
|
*/
|
||||||
public final CompletableFuture<Integer> send(Convert convert, Object message, boolean last) {
|
public final CompletableFuture<Integer> send(Convert convert, Object message, boolean last) {
|
||||||
if (message instanceof CompletableFuture) {
|
if (message instanceof CompletableFuture) {
|
||||||
return ((CompletableFuture) message).thenCompose((json) -> sendPacket(new WebSocketPacket(convert == null ? _jsonConvert : convert, json, last)));
|
return ((CompletableFuture) message).thenCompose((json) -> sendPacket(new WebSocketPacket(convert == null ? _textConvert : convert, json, last)));
|
||||||
}
|
}
|
||||||
return sendPacket(new WebSocketPacket(convert == null ? _jsonConvert : convert, message, last));
|
return sendPacket(new WebSocketPacket(convert == null ? _textConvert : convert, message, last));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -219,7 +220,7 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
return ((CompletableFuture) message).thenCompose((json) -> _engine.node.sendMessage(json, last, userids));
|
return ((CompletableFuture) message).thenCompose((json) -> _engine.node.sendMessage(json, last, userids));
|
||||||
}
|
}
|
||||||
CompletableFuture<Integer> rs = _engine.node.sendMessage(message, last, userids);
|
CompletableFuture<Integer> rs = _engine.node.sendMessage(message, last, userids);
|
||||||
if (_engine.finest) _engine.logger.finest("userids:" + Arrays.toString(userids) + " send websocket message(" + _jsonConvert.convertTo(message) + ")");
|
if (_engine.finest) _engine.logger.finest("userids:" + Arrays.toString(userids) + " send websocket message(" + message + ")");
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +249,7 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
return ((CompletableFuture) message).thenCompose((json) -> _engine.node.broadcastMessage(json, last));
|
return ((CompletableFuture) message).thenCompose((json) -> _engine.node.broadcastMessage(json, last));
|
||||||
}
|
}
|
||||||
CompletableFuture<Integer> rs = _engine.node.broadcastMessage(message, last);
|
CompletableFuture<Integer> rs = _engine.node.broadcastMessage(message, last);
|
||||||
if (_engine.finest) _engine.logger.finest("broadcast send websocket message(" + _jsonConvert.convertTo(message) + ")");
|
if (_engine.finest) _engine.logger.finest("broadcast send websocket message(" + message + ")");
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import java.util.concurrent.*;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
import org.redkale.convert.json.JsonConvert;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WebSocket的消息接收发送器, 一个WebSocket对应一个WebSocketRunner
|
* WebSocket的消息接收发送器, 一个WebSocket对应一个WebSocketRunner
|
||||||
@@ -50,8 +49,6 @@ class WebSocketRunner implements Runnable {
|
|||||||
|
|
||||||
protected long lastSendTime;
|
protected long lastSendTime;
|
||||||
|
|
||||||
protected final JsonConvert textConvert;
|
|
||||||
|
|
||||||
WebSocketRunner(Context context, WebSocket webSocket, BiConsumer<WebSocket, Object> messageConsumer, AsyncConnection channel, final boolean wsbinary) {
|
WebSocketRunner(Context context, WebSocket webSocket, BiConsumer<WebSocket, Object> messageConsumer, AsyncConnection channel, final boolean wsbinary) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.engine = webSocket._engine;
|
this.engine = webSocket._engine;
|
||||||
@@ -60,7 +57,6 @@ class WebSocketRunner implements Runnable {
|
|||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.wsbinary = wsbinary;
|
this.wsbinary = wsbinary;
|
||||||
this.readBuffer = context.pollBuffer();
|
this.readBuffer = context.pollBuffer();
|
||||||
this.textConvert = context.getJsonConvert();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -118,7 +114,7 @@ class WebSocketRunner implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (packet.type == FrameType.TEXT) {
|
if (packet.type == FrameType.TEXT) {
|
||||||
Object message = textConvert.convertFrom(webSocket._messageTextType, packet.receiveMasker, packet.receiveBuffers);
|
Object message = webSocket._textConvert.convertFrom(webSocket._messageTextType, packet.receiveMasker, packet.receiveBuffers);
|
||||||
if (readBuffer != null) {
|
if (readBuffer != null) {
|
||||||
readBuffer.clear();
|
readBuffer.clear();
|
||||||
channel.read(readBuffer, null, this);
|
channel.read(readBuffer, null, this);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
import javax.annotation.*;
|
import javax.annotation.*;
|
||||||
|
import org.redkale.convert.Convert;
|
||||||
import org.redkale.convert.json.JsonConvert;
|
import org.redkale.convert.json.JsonConvert;
|
||||||
import org.redkale.service.*;
|
import org.redkale.service.*;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
@@ -64,10 +65,14 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
|
|||||||
protected int liveinterval = DEFAILT_LIVEINTERVAL;
|
protected int liveinterval = DEFAILT_LIVEINTERVAL;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
protected JsonConvert jsonConvert; //Rest.createRestWebSocketServlet 需要过滤掉已有的@Resource
|
private JsonConvert jsonConvert;
|
||||||
|
|
||||||
|
protected Convert textConvert;
|
||||||
|
|
||||||
|
protected Convert binaryConvert;
|
||||||
|
|
||||||
@Resource(name = "$")
|
@Resource(name = "$")
|
||||||
protected WebSocketNode node; //Rest.createRestWebSocketServlet 需要过滤掉已有的@Resource
|
protected WebSocketNode node;
|
||||||
|
|
||||||
protected WebSocketServlet() {
|
protected WebSocketServlet() {
|
||||||
Type msgtype = String.class;
|
Type msgtype = String.class;
|
||||||
@@ -96,6 +101,7 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
|
|||||||
this.node = new WebSocketNodeService();
|
this.node = new WebSocketNodeService();
|
||||||
if (logger.isLoggable(Level.WARNING)) logger.warning("Not found WebSocketNode, create a default value for " + getClass().getName());
|
if (logger.isLoggable(Level.WARNING)) logger.warning("Not found WebSocketNode, create a default value for " + getClass().getName());
|
||||||
}
|
}
|
||||||
|
if (this.textConvert == null) this.textConvert = jsonConvert;
|
||||||
//存在WebSocketServlet,则此WebSocketNode必须是本地模式Service
|
//存在WebSocketServlet,则此WebSocketNode必须是本地模式Service
|
||||||
this.node.localEngine = new WebSocketEngine("WebSocketEngine-" + addr.getHostString() + ":" + addr.getPort() + "-[" + resourceName() + "]", this.single, context, liveinterval, this.node, logger);
|
this.node.localEngine = new WebSocketEngine("WebSocketEngine-" + addr.getHostString() + ":" + addr.getPort() + "-[" + resourceName() + "]", this.single, context, liveinterval, this.node, logger);
|
||||||
this.node.init(conf);
|
this.node.init(conf);
|
||||||
@@ -131,7 +137,8 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
|
|||||||
final WebSocket webSocket = this.createWebSocket();
|
final WebSocket webSocket = this.createWebSocket();
|
||||||
webSocket._engine = this.node.localEngine;
|
webSocket._engine = this.node.localEngine;
|
||||||
webSocket._messageTextType = this.messageTextType;
|
webSocket._messageTextType = this.messageTextType;
|
||||||
webSocket._jsonConvert = jsonConvert;
|
webSocket._textConvert = textConvert;
|
||||||
|
webSocket._binaryConvert = binaryConvert;
|
||||||
webSocket._remoteAddress = request.getRemoteAddress();
|
webSocket._remoteAddress = request.getRemoteAddress();
|
||||||
webSocket._remoteAddr = request.getRemoteAddr();
|
webSocket._remoteAddr = request.getRemoteAddr();
|
||||||
initRestWebSocket(webSocket);
|
initRestWebSocket(webSocket);
|
||||||
|
|||||||
Reference in New Issue
Block a user