Атмосфера websocket, возвращающая несколько объектов - PullRequest
0 голосов
/ 26 ноября 2018

Я использую Atmosphere Framework для веб-сокетов, и я не понял ответ, полученный от Atmosphere, возможно, кто-то может указать мне правильное направление.

По сути, у меня есть несколько типов сообщений, которыеПользователь отправляет на сервер веб-сокет, каждый из которых определен как MessageBean с параметром «тип», чтобы различать каждый тип сообщения с помощью класса Google Gson RuntimeTypeAdapterFactory.

Это все работает нормально, но проблема в том, что когда я кодирую сообщение обратно пользователю:

@Message(decoders = {MessageServer.class}, encoders = {MessageServer.class})
public MessageProtocolBean onMessage(AtmosphereResource atmosphereResource,      
    MessageBean message) throws IOException {
    if (message instanceof ChatBean) {
       ... do stuff
       return new MessgeProtocolBean(chatBean);
    } else {
    ...
    }

})

Теперь MessageProtocolBean может выглядеть примерно так:

public class MessageProtocolBean {

    private String message;
    private ChatBean chat = new ChatBean(); 
    private List<ChatBean> chats = new ArrayList<ChatBean>();
    private List<User> users = new ArrayList<User>();
    private List<AlertBean> alerts = new ArrayList<AlertBean>();
    private Map<String,ContactBean> contacts = new 
           HashMap<String,ContactBean>();

    public MessageProtocolBean(ChatBean chat) {
            this.chat = chat;
    }

    public MessageProtocolBean(ChatBean chat, Collection<User> users, 
       Map<String,ContactBean> contacts, Collection<AlertBean> alerts) {
            this.chat = chat;
            this.users.addAll(users);
            this.contacts.putAll(contacts);
            this.alerts.addAll(alerts);
    }

Теперь, когда пользователь отправляет только сообщение чата, всем клиентам возвращается объект JavaScript:

Object { chat: {…}, chats: [], users: [], alerts: [], contacts: {} }

Обратите внимание, что параметр "chat" не пустой, но все остальные, несмотря на то, чтобыло возвращено только сообщение чата.В чем я не уверен, так как я указал return MessageProtocolBean (чат ChatBean), почему я получаю все?

...