Перехват сообщения из unity использую WebSocketSharp на сервере Spring

Не могу решить проблему. Необходимо отправлять сообщения серверу через сокет и обрабатывать их. События подписки, отписки, подключения и отключения я перехватить на сервере могу. А вот как отправить сообщение по определенному destonation и перехватить его на сервере не могу понять. На клиенте использую библиотеку https://github.com/sta/websocket-sharp

Код сервера

@Configuration
@EnableWebSocket
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer  implements WebSocketConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/multiplayer");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/multiplayer").setAllowedOrigins("*").withSockJS();
    }

    @Autowired
    MessageHandler messageHandler;

    // вариант перехвата сообщения
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
        webSocketHandlerRegistry.addHandler(messageHandler, "/result-game");
    }
}

В методе registerWebSocketHandlers я регистрирую слушателя, он перехватывает сообщения, только если в место "/result-game" указать "/multiplayer/websocket" беда только в том, что он перехватывает вообще все и перестают работать слушатели @EventListaner которые перехватывали у меня события подключения, отключения и тд. И при попытке отправить клиенту по сокету данные то клиент их не получает.

Код клиента

 var DOMAIN = "1.1.0.1:8080";
 _webSocket = new WebSocket($"ws://{DOMAIN}/multiplayer/websocket");

_webSocket.OnOpen += (sender, e) =>
{
        // Отправка сообщения о подключении
        StompMessageSerializer serializer = new StompMessageSerializer();
        var connect = new StompMessage("CONNECT");
        connect["accept-version"] = "1.1";
        connect["heart-beat"] = "10000,10000";
        connect["playerId"] = _id;
        var s = serializer.Serialize(connect);
        SubscribeSocket(clientId.ToString(), $"/multiplayer/connect/{_id}", ConnectServer);

        _webSocket.Send(s);
        // Попытка отправить сообщения по определенному destination 
        var content = new { Subject = "Stomp client", Message = "Hello World!!" };
        var broad = new StompMessage("SEND", JsonConvert.SerializeObject(content));
        broad["content-type"] = "application/json";
        broad["destination"] = "/result-game";
        _webSocket.Send(serializer.Serialize(broad));

        Debug.LogError(TAG + "Connect open");
    }; 
    _webSocket.ConnectAsync();

На сервере по мимо варианта выше есть еще две попытки перехвата

Первая

@Slf4j
@Controller
@RequiredArgsConstructor
public class MessageController{

    @MessageMapping("/result-game")
    public void say(String message) throws InterruptedException {
        Thread.sleep(30);
    }
} 

Вторая

@ServerEndpoint("/result-game")
public class MessageHandle {
    @OnMessage
    public void handleMessage(Session session, String message) {
        // Do something with the message
        System.out.println("Received message: " + message);
    }

    @OnMessage
    public void processGreeting(String message, Session session) {
        System.out.println("Greeting received:" + message);
    }
}

Не мог бы кто то подсказать что делаю не так со spring и сокетами работаю впервые


Ответы (0 шт):