Как решить проблему с сокетом, не отправляющим сообщения на определенные каналы? - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь написать фляжный чат с каналами. Он отлично работает, но только с аргументом «широковещательный», установленным в True при отправке сообщений. Как только я изменяю 'broadcast = True' на 'room = room' в @ socketio.on ('send message'), он вообще перестает отправлять сообщения. Когда я нажимаю кнопку отправки, ничего не происходит, ничего не отображается. Кто-нибудь может указать, в чем здесь проблема? Я потратил много дней на это, я буду благодарен всем намекам. Спасибо.

Сервер:

@socketio.on('join')
def on_join(room):
    print(f"joined channel is: {room}")
    username = session.get("name")
    join_room(room)
    data = {"username": username, "room": room}
    emit('join', data)


@socketio.on('send message')
def handleMessage(data):
    # get user's name and sent message
    print(f"sent data is: {data}")
    message = data["message"]
    name = data["name"]
    date = data["date"]
    room = data["room"]
    print(f"room is: {room}")
    # save data into messages dict   
    messages[room].append(message)

    emit("announce message", {"message": message, "name": name, "date": date},
    broadcast=True)

Клиент (из channel.html, где пользователи нажимают на ссылки, перенаправляющие их на определенный шаблон канала):

// set onclick funtion to dynamically created elements with jinja2
document.getElementById("all-channels").addEventListener(
    "click", 
    event => {
        if (event.target && event.target.matches("button")) {
            alert("every single button should fucking work");
            const room = event.target.innerHTML;
            alert(room);
            socket.emit('join', room);
        }
    }, 
    false
);

Клиент (из channel.html, определенный шаблон канала, с которого отправляются сообщения):

// configure 'send' button to emit 'send message' event
document.querySelector("#submit-message").onclick = (data) => {
    const message = document.querySelector("#message").value;
    const room = document.querySelector("#specific-channel").innerHTML;
    const name = localStorage.getItem("name");
    var date = new Date();
    date = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' ' + '|' + ' ' + date.getHours() + ":" + date.getMinutes();
    socket.emit(
        'send message', 
        {"message": message, "date": date, "room": room, "name": name}
    );
                        console.log(room);
};
              
                    
// when message is sent, add it to ul
socket.on(
    'announce message', 
    data => {
        const li = document.createElement('li');
        const name_test = data.name;
        li.innerHTML = `(${data.date} ${data.name}: ${data.message})`;
        document.querySelector("#messages").append(li);
        document.querySelector("#message").value = "";
        console.log(data);
   }
);

Нет ошибок. Console.log и оповещения показывают результаты, как я ожидаю.

...