Flask-SocketIO, личные сообщения и проблемы join_room () - PullRequest
0 голосов
/ 04 марта 2019

У меня проблемы с добавлением частных комнат в этот учебник: https://codeburst.io/building-your-first-chat-application-using-flask-in-7-minutes-f98de4adfa5d

Я также использую Flask-Login для создания пользовательских профилей входа.Я сузил самое простое решение для создания комнаты для пользователей, чтобы присоединиться с помощью join_room ().Я пытался внедрить это в свой код, но я должен делать что-то не так, потому что ничего не работает.Вот мой код:

Python:

@app.route('/message/<string:chat_id>/', methods=['GET', 'POST'])
@login_required
def message(chat_id):
    return render_template('message.html', currentuser = \
                          str(current_user.username), chatid = chat_id)

def messageReceived(methods=['GET', 'POST']):
    print('message was received!!!')

@socketio.on('join')
def on_join(data):
    username = data['username']
    room = data['room']
    join_room(room)
    send(username + ' has entered the room.', room=room)

@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']):
    print('received my event: ' + str(json))
    socketio.emit('my response',  json, callback=messageReceived)

HTML:

<form action="" method="POST">
  <input type="text" class="message" placeholder="Messages"/>
  <input type="submit"/>
</form>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script type="text/javascript">
  var user_name = "{{currentuser}}"
  var socket = io.connect();

  socket.emit('join', {
    username : '{{currentuser}}',
    room : '{{chatid}}'
  })

  socket.on( 'connect', function(socketio) {
    socket.emit( 'my event', {
      data: 'User Connected'
    } )
    var form = $( 'form' ).on( 'submit', function( e ) {
      e.preventDefault()
      let user_input = $( 'input.message' ).val()
      socket.emit( 'my event', {
        user_name : user_name,
        message : user_input
      } )
      $( 'input.message' ).val( '' ).focus()
    } )
  } )

  socket.on( 'my response', function( msg ) {
    console.log( msg )
    if( typeof msg.user_name !== 'undefined' ) {
      $( 'h3' ).remove()
      $( 'div.message_holder' ).append( '<div><b>'+msg.user_name+'</b> '+msg.message+'</div>' )
    }
  })
</script>

При запуске этогоКод на localhost в двух отдельных браузерах, оба пользователя могут видеть сообщения.Используя функции печати, я убедился, что переменная помещения, объявленная в функции @ socketio.on ('join'), различна для двух пользователей.При запуске кода не выдается никаких ошибок.Любая помощь или указание мне в правильном направлении будет очень признателен!

...