From 020d9c853ddbc7c9de5fffabc144b020b5a60bc4 Mon Sep 17 00:00:00 2001 From: redkale Date: Fri, 25 Oct 2024 17:04:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3WebSocket=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E5=A4=9AService=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/redkale/net/http/Rest.java | 23 +++++++++++-------- .../org/redkale/source/CacheMemorySource.java | 3 +-- .../org/redkale/source/DataMemorySource.java | 2 +- .../wsdync/_DyncChatWebSocketServlet.java | 9 ++++++-- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/redkale/net/http/Rest.java b/src/main/java/org/redkale/net/http/Rest.java index d1177c5f0..5dffbebb1 100644 --- a/src/main/java/org/redkale/net/http/Rest.java +++ b/src/main/java/org/redkale/net/http/Rest.java @@ -487,8 +487,8 @@ public final class Rest { sb1.append(Type.getDescriptor(field.getType())); sb2.append(Utility.getTypeDescriptor(field.getGenericType())); } - final String resourceDesc = sb1.toString(); - final String resourceGenericDesc = sb1.length() == sb2.length() ? null : sb2.toString(); + final String serviceParamsDesc = sb1.toString(); + final String serviceParamsGenericDesc = sb1.equals(sb2) ? null : sb2.toString(); // ---------------------------------------------------------------------------------------- ClassWriter cw = new ClassWriter(COMPUTE_FRAMES); @@ -628,7 +628,7 @@ public final class Rest { "_redkale_resource_" + i, Type.getDescriptor(resourcesFields.get(i).getType())); } - mv.visitMethodInsn(INVOKESPECIAL, newDynWebSokcetFullName, "", "(" + resourceDesc + ")V", false); + mv.visitMethodInsn(INVOKESPECIAL, newDynWebSokcetFullName, "", "(" + serviceParamsDesc + ")V", false); mv.visitInsn(ARETURN); mv.visitMaxs(2 + resourcesFields.size(), 1); mv.visitEnd(); @@ -793,8 +793,7 @@ public final class Rest { mv.visitInsn(ARETURN); Label label2 = new Label(); mv.visitLabel(label2); - mv.visitLocalVariable( - "this", "L" + newDynSuperMessageFullName + ";", null, label0, label2, 0); + mv.visitLocalVariable("this", "L" + newDynSuperMessageFullName + ";", null, label0, label2, 0); mv.visitLocalVariable("name", "Ljava/lang/String;", null, label0, label2, 1); mv.visitMaxs(2, 2); mv.visitEnd(); @@ -981,9 +980,9 @@ public final class Rest { cw2.visitInnerClass( newDynWebSokcetFullName, newDynName, newDynWebSokcetSimpleName, ACC_PUBLIC + ACC_STATIC); { - String resSignature = resourceGenericDesc == null ? null : ("(" + resourceGenericDesc + ")V"); + String resSignature = serviceParamsGenericDesc == null ? null : ("(" + serviceParamsGenericDesc + ")V"); mv = new MethodDebugVisitor( - cw2.visitMethod(ACC_PUBLIC, "", "(" + resourceDesc + ")V", resSignature, null)); + cw2.visitMethod(ACC_PUBLIC, "", "(" + serviceParamsDesc + ")V", resSignature, null)); Label sublabel0 = new Label(); mv.visitLabel(sublabel0); mv.visitVarInsn(ALOAD, 0); @@ -999,8 +998,14 @@ public final class Rest { Label sublabel2 = new Label(); mv.visitLabel(sublabel2); mv.visitLocalVariable("this", "L" + newDynWebSokcetFullName + ";", null, sublabel0, sublabel2, 0); - if (!resourceDesc.isEmpty()) { - mv.visitLocalVariable("service", resourceDesc, resSignature, sublabel0, sublabel2, 1); + for (int i = 0; i < resourcesFields.size(); i++) { + Field field = resourcesFields.get(i); + String fieldDesc = Type.getDescriptor(field.getType()); + String fieldSignature = Utility.getTypeDescriptor(field.getGenericType()); + if (fieldDesc.equals(fieldSignature)) { + fieldSignature = null; + } + mv.visitLocalVariable(field.getName(), fieldDesc, fieldSignature, sublabel0, sublabel2, 1 + i); } mv.visitMaxs(2, 1 + resourcesFields.size()); mv.visitEnd(); diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 0e9bea2e0..e32e5c36a 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -116,8 +116,7 @@ public final class CacheMemorySource extends AbstractCacheSource { @Override public String toString() { - return getClass().getSimpleName() + "{type=memory, name='" + resourceName() + "', hash=" - + Objects.hashCode(this) + "}"; + return getClass().getSimpleName() + "_" + Objects.hash(this) + "{type=memory, name='" + resourceName() + "'}"; } @Override diff --git a/src/main/java/org/redkale/source/DataMemorySource.java b/src/main/java/org/redkale/source/DataMemorySource.java index 88a1bee1b..db318919a 100644 --- a/src/main/java/org/redkale/source/DataMemorySource.java +++ b/src/main/java/org/redkale/source/DataMemorySource.java @@ -71,7 +71,7 @@ public class DataMemorySource extends AbstractDataSource { @Override public String toString() { - return getClass().getSimpleName() + "{type=memory, name='" + resourceName() + "'}"; + return getClass().getSimpleName() + "_" + Objects.hash(this) + "{type=memory, name='" + resourceName() + "'}"; } @Override diff --git a/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java b/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java index a9d1785cf..df68e540a 100644 --- a/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java +++ b/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java @@ -13,6 +13,7 @@ import org.redkale.annotation.Resource; import org.redkale.convert.ConvertDisabled; import org.redkale.convert.json.JsonConvert; import org.redkale.net.http.*; +import org.redkale.test.rest.UserService; import org.redkale.test.ws.ChatMessage; import org.redkale.test.ws.ChatService; import org.redkale.test.ws.ChatWebSocket; @@ -24,6 +25,9 @@ public final class _DyncChatWebSocketServlet extends WebSocketServlet { @Resource private ChatService _redkale_resource_0; + @Resource + private UserService _redkale_resource_1; + public static Map _redkale_annotations; public _DyncChatWebSocketServlet() { @@ -33,7 +37,7 @@ public final class _DyncChatWebSocketServlet extends WebSocketServlet { @Override protected WebSocket createWebSocket() { - return (WebSocket) new _DyncChatWebSocket(_redkale_resource_0); + return (WebSocket) new _DyncChatWebSocket(_redkale_resource_0, _redkale_resource_1); } @Override @@ -43,9 +47,10 @@ public final class _DyncChatWebSocketServlet extends WebSocketServlet { public static class _DyncChatWebSocket extends ChatWebSocket { - public _DyncChatWebSocket(ChatService service) { + public _DyncChatWebSocket(ChatService service, UserService userService) { super(); this.service = service; + this.userService = userService; } }