WebSocketParam增加getNames方法

This commit is contained in:
Redkale
2018-01-26 20:29:22 +08:00
parent 4d8026ec99
commit 1573e79041
4 changed files with 28 additions and 1 deletions

View File

@@ -424,6 +424,21 @@ public final class Rest {
mv.visitMaxs(1, 1);
mv.visitEnd();
}
{ //getNames
mv = new AsmMethodVisitor(cw2.visitMethod(ACC_PUBLIC, "getNames", "()[Ljava/lang/String;", null, null));
pushInt(mv, paramap.size());
mv.visitTypeInsn(ANEWARRAY, "java/lang/String");
int index = -1;
for (Map.Entry<String, Parameter> en : paramap.entrySet()) {
mv.visitInsn(DUP);
mv.visitInsn(++index);
mv.visitLdcInsn(en.getKey());
mv.visitInsn(AASTORE);
}
mv.visitInsn(ARETURN);
mv.visitMaxs(paramap.size() + 2, 1);
mv.visitEnd();
}
{ //getValue
mv = new AsmMethodVisitor(cw2.visitMethod(ACC_PUBLIC, "getValue", "(Ljava/lang/String;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>(Ljava/lang/String;)TT;", null));
for (Map.Entry<String, Parameter> en : paramap.entrySet()) {

View File

@@ -16,4 +16,6 @@ package org.redkale.net.http;
public interface WebSocketParam {
public <T> T getValue(String name);
public String[] getNames();
}

View File

@@ -219,7 +219,7 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
temprunner = null;
webSocket._userid = userid;
if (single && !anyuser) {
WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, ex) -> {
WebSocketServlet.this.node.existsWebSocket(userid).whenComplete((rs, nex) -> {
if (rs) webSocket.onSingleRepeatConnect();
WebSocketServlet.this.node.localEngine.add(webSocket);
WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel());

View File

@@ -70,6 +70,11 @@ public final class _DyncChatWebSocketServlet extends WebSocketServlet {
@ConvertDisabled
public _DyncChatWebSocket _redkale_websocket;
@Override
public String[] getNames() {
return new String[]{"message", "extmap"};
}
@Override
public <T> T getValue(String name) {
if ("message".equals(name)) return (T) message;
@@ -100,6 +105,11 @@ public final class _DyncChatWebSocketServlet extends WebSocketServlet {
@ConvertDisabled
public _DyncChatWebSocket _redkale_websocket;
@Override
public String[] getNames() {
return new String[]{"roomid"};
}
@Override
public <T> T getValue(String name) {
if ("roomid".equals(name)) return (T) (Integer) roomid;