test
This commit is contained in:
@@ -4057,7 +4057,6 @@ public final class Rest {
|
|||||||
}
|
}
|
||||||
cw2.visitEnd();
|
cw2.visitEnd();
|
||||||
byte[] bytes = cw2.toByteArray();
|
byte[] bytes = cw2.toByteArray();
|
||||||
classLoader.addDynClass((newDynName + "$" + entry.newActionClassName).replace('/', '.'), bytes);
|
|
||||||
innerClassBytesMap.put((newDynName + "$" + entry.newActionClassName).replace('/', '.'), bytes);
|
innerClassBytesMap.put((newDynName + "$" + entry.newActionClassName).replace('/', '.'), bytes);
|
||||||
}
|
}
|
||||||
} // end for each
|
} // end for each
|
||||||
@@ -4221,17 +4220,9 @@ public final class Rest {
|
|||||||
|
|
||||||
cw.visitEnd();
|
cw.visitEnd();
|
||||||
byte[] bytes = cw.toByteArray();
|
byte[] bytes = cw.toByteArray();
|
||||||
classLoader.addDynClass(newDynName.replace('/', '.'), bytes);
|
|
||||||
try {
|
try {
|
||||||
Class<?> newClazz = classLoader.loadClass(newDynName.replace('/', '.'));
|
Class<?> newClazz = classLoader.loadClass(newDynName.replace('/', '.'), bytes, innerClassBytesMap);
|
||||||
innerClassBytesMap.forEach((n, bs) -> {
|
innerClassBytesMap.forEach((n, bs) -> RedkaleClassLoader.putReflectionClass(n));
|
||||||
try {
|
|
||||||
classLoader.loadClass(n, bs);
|
|
||||||
RedkaleClassLoader.putReflectionClass(n);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RestException(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
RedkaleClassLoader.putReflectionDeclaredConstructors(newClazz, newDynName.replace('/', '.'));
|
RedkaleClassLoader.putReflectionDeclaredConstructors(newClazz, newDynName.replace('/', '.'));
|
||||||
for (java.lang.reflect.Type t : retvalTypes) {
|
for (java.lang.reflect.Type t : retvalTypes) {
|
||||||
JsonFactory.root().loadEncoder(t);
|
JsonFactory.root().loadEncoder(t);
|
||||||
|
|||||||
@@ -504,6 +504,19 @@ public class RedkaleClassLoader extends URLClassLoader {
|
|||||||
return clz;
|
return clz;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Class loadClass(String name, byte[] bs, Map<String, byte[]> innerClassMap) {
|
||||||
|
innerClassMap.forEach((k, v) -> {
|
||||||
|
dynClassBytesMap.put(k, v);
|
||||||
|
allDynClassBytesMap.put(k, v);
|
||||||
|
});
|
||||||
|
Class clz = defineClass(name, bs, 0, bs.length);
|
||||||
|
dynClassTypeMap.put(name, clz);
|
||||||
|
dynClassBytesMap.put(name, bs);
|
||||||
|
allDynClassTypeMap.put(name, clz);
|
||||||
|
allDynClassBytesMap.put(name, bs);
|
||||||
|
return clz;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class loadClass(String name) throws ClassNotFoundException {
|
public Class loadClass(String name) throws ClassNotFoundException {
|
||||||
Class clazz = allDynClassTypeMap.get(name);
|
Class clazz = allDynClassTypeMap.get(name);
|
||||||
@@ -532,10 +545,6 @@ public class RedkaleClassLoader extends URLClassLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void addDynClass(String name, byte[] bs) {
|
|
||||||
dynClassBytesMap.put(name, bs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addURI(URI uri) {
|
public void addURI(URI uri) {
|
||||||
try {
|
try {
|
||||||
super.addURL(uri.toURL());
|
super.addURL(uri.toURL());
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2116 Redkale
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package org.redkale.test.websocket.dyn;
|
||||||
|
|
||||||
|
import org.redkale.convert.ConvertColumn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
public class GameRoomBean {
|
||||||
|
@ConvertColumn(index = 1)
|
||||||
|
public int roomid;
|
||||||
|
|
||||||
|
@ConvertColumn(index = 2)
|
||||||
|
public String roomName;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "RoomBean{" + "roomid=" + roomid + ", roomName=" + roomName + '}';
|
||||||
|
}
|
||||||
|
}
|
||||||
28
src/test/java/org/redkale/test/websocket/dyn/GameTest.java
Normal file
28
src/test/java/org/redkale/test/websocket/dyn/GameTest.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2116 Redkale
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package org.redkale.test.websocket.dyn;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.redkale.net.http.Rest;
|
||||||
|
import org.redkale.net.http.WebSocketServlet;
|
||||||
|
import org.redkale.util.RedkaleClassLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
public class GameTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Throwable {
|
||||||
|
GameTest test = new GameTest();
|
||||||
|
test.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void run() throws Exception {
|
||||||
|
RedkaleClassLoader classLoader = RedkaleClassLoader.getRedkaleClassLoader();
|
||||||
|
WebSocketServlet servlet = Rest.createRestWebSocketServlet(classLoader, GameWebSocket.class, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2116 Redkale
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package org.redkale.test.websocket.dyn;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import org.redkale.net.http.HttpRequest;
|
||||||
|
import org.redkale.net.http.RestOnMessage;
|
||||||
|
import org.redkale.net.http.RestWebSocket;
|
||||||
|
import org.redkale.net.http.WebSocket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
@RestWebSocket(name = "wstest", catalog = "ws", wsmaxconns = 100, comment = "WebSocket服务", repair = false)
|
||||||
|
public class GameWebSocket extends WebSocket<Long, Object> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CompletableFuture<String> onOpen(final HttpRequest request) {
|
||||||
|
return CompletableFuture.completedFuture("uuid001");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CompletableFuture<Long> createUserid() {
|
||||||
|
return CompletableFuture.completedFuture(111222L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RestOnMessage(name = "joinRoom", comment = "加入房间")
|
||||||
|
public void joinRoom(GameRoomBean bean) {
|
||||||
|
System.out.println("加入房间-参数: " + bean);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RestOnMessage(name = "enterGame", comment = "加入游戏")
|
||||||
|
public void enterGame(String game, long time) {
|
||||||
|
System.out.println("加入游戏-参数: " + game + ", " + time);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user