mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
Fix Java offline client connection cleanup (#3229)
* fix(runtime): close Java client after final offline result * test(runtime): exercise EOF through Java client API
This commit is contained in:
@@ -225,7 +225,10 @@ public class FunasrWsClient extends WebSocketClient {
|
||||
close();
|
||||
}
|
||||
|
||||
if (iseof && mode.equals("offline") && jsonObject.containsKey("is_final") && jsonObject.get("is_final").equals("false")) {
|
||||
if (iseof
|
||||
&& mode.equals("offline")
|
||||
&& jsonObject.containsKey("is_final")
|
||||
&& Boolean.TRUE.equals(jsonObject.get("is_final"))) {
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ WEBSOCKET_DIR:= ./
|
||||
WEBSOCKET_FILES = \
|
||||
$(WEBSOCKET_DIR)/FunasrWsClient.java \
|
||||
|
||||
TEST_FILES = $(WEBSOCKET_DIR)/tests/FunasrWsClientTest.java
|
||||
|
||||
|
||||
LIB_BUILD_DIR = ./lib
|
||||
@@ -31,7 +32,7 @@ vpath %.java src
|
||||
|
||||
rebuild: clean all
|
||||
|
||||
.PHONY: clean run downjar
|
||||
.PHONY: clean run downjar test
|
||||
|
||||
downjar:
|
||||
wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar -P ./lib/
|
||||
@@ -61,6 +62,11 @@ runclient:
|
||||
buildwebsocket: $(WEBSOCKET_FILES:.java=.class)
|
||||
|
||||
|
||||
test: buildwebsocket
|
||||
$(JAVAC) -cp $(BUILD_DIR):lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:lib/Java-WebSocket-1.5.3.jar:lib/json-simple-1.1.1.jar:lib/argparse4j-0.9.0.jar -d $(BUILD_DIR) -encoding UTF-8 $(TEST_FILES)
|
||||
java -ea -cp $(BUILD_DIR):lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:lib/Java-WebSocket-1.5.3.jar:lib/json-simple-1.1.1.jar:lib/argparse4j-0.9.0.jar $(RUNJFLAGS) websocket.FunasrWsClientTest
|
||||
|
||||
|
||||
%.class: %.java
|
||||
|
||||
$(JAVAC) -cp $(BUILD_DIR):lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:lib/Java-WebSocket-1.5.3.jar:lib/json-simple-1.1.1.jar:lib/argparse4j-0.9.0.jar -d $(BUILD_DIR) -encoding UTF-8 $<
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package websocket;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
public final class FunasrWsClientTest {
|
||||
private static final class RecordingClient extends FunasrWsClient {
|
||||
private boolean closeCalled;
|
||||
|
||||
RecordingClient() throws Exception {
|
||||
super(new URI("ws://127.0.0.1:1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
closeCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(String text) {}
|
||||
}
|
||||
|
||||
private static void assertCloseDecision(
|
||||
boolean expected, boolean eof, String clientMode, String message, String description)
|
||||
throws Exception {
|
||||
RecordingClient client = new RecordingClient();
|
||||
FunasrWsClient.mode = clientMode;
|
||||
if (eof) {
|
||||
client.sendEof();
|
||||
}
|
||||
|
||||
client.onMessage(message);
|
||||
if (client.closeCalled != expected) {
|
||||
throw new AssertionError(
|
||||
description + ": expected close=" + expected + ", actual=" + client.closeCalled);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
assertCloseDecision(
|
||||
false,
|
||||
true,
|
||||
"offline",
|
||||
"{\"text\":\"partial\",\"is_final\":false}",
|
||||
"non-final offline response");
|
||||
assertCloseDecision(
|
||||
false,
|
||||
false,
|
||||
"offline",
|
||||
"{\"text\":\"done\",\"is_final\":true}",
|
||||
"final response before EOF");
|
||||
assertCloseDecision(
|
||||
false,
|
||||
true,
|
||||
"online",
|
||||
"{\"text\":\"done\",\"is_final\":true}",
|
||||
"final online response");
|
||||
assertCloseDecision(
|
||||
true,
|
||||
true,
|
||||
"offline",
|
||||
"{\"text\":\"legacy done\"}",
|
||||
"legacy offline response without is_final");
|
||||
assertCloseDecision(
|
||||
true,
|
||||
true,
|
||||
"offline",
|
||||
"{\"mode\":\"2pass-offline\",\"text\":\"done\",\"is_final\":true}",
|
||||
"final offline response");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user