Problem in Opera?

  • Hi,


    ich habe lokal das Ganze soweit zum Laufen gebracht, jedoch wird mir in Opera (userID 2) immer die eigenen Nachricht zugestellt, obwohl diese eigentlich nur an den anderne Benutzer gehen sollte. In Chrome (userID 1) funktioniert das Ganze jedoch.


    Nachricht von Chrome absenden und empfangen in Opera:

    Code
    nodePush Push: {"message":"de.cwalz.cChat","target":{"users":[2]},"payload":[]} +9s
      nodePush de.cwalz.cChat -> {"users":[2]} +0ms
      socket.io-parser encoding packet {"type":2,"data":["de.cwalz.cChat",[]],"nsp":"/"} +9s
      socket.io-parser encoded {"type":2,"data":["de.cwalz.cChat",[]],"nsp":"/"} as 2["de.cwalz.cChat",[]] +0ms
      socket.io:client writing packet ["2[\"de.cwalz.cChat\",[]]"] +9s
      engine:socket sending packet "message" (2["de.cwalz.cChat",[]]) +8s
      engine:socket flushing buffer to transport +0ms
      engine:ws writing "42["de.cwalz.cChat",[]]" +0ms


    Code
    1589692997.104011 [0 127.0.0.1:59586] "PUBLISH" "e6a86f39-e1e6-4e9e-9b8a-fd461850ada4:nodePush" "{\"message\":\"de.cwalz.cChat\",\"target\":{\"users\":[2]},\"payload\":[]}"


    Nachricht von Opera absenden und empfangen in Chrome und Opera (falsch):



    Code
    1589693091.551276 [0 127.0.0.1:59732] "PUBLISH" "e6a86f39-e1e6-4e9e-9b8a-fd461850ada4:nodePush" "{\"message\":\"de.cwalz.cChat\",\"target\":{\"users\":{\"1\":1}},\"payload\":[]}"



    Code:


  • Ah, Problem gefunden:


    Code
            PushHandler::getInstance()->sendMessage([
                'message' => 'de.cwalz.cChat',
                'target' => [
                    'users' => array_values($participants)
                ]
            ]);

    Der NodeJS-Server scheint hier nicht mit assoziativen Arrays zurecht zu kommen. Oder vllt. liegt es auch an der Lücke im Array.

    • Official Post

    Der NodeJS-Server scheint hier nicht mit assoziativen Arrays zurecht zu kommen. Oder vllt. liegt es auch an der Lücke im Array.

    Das hängt unmittelbar zusammen. Wenn das Array ein Loch hat, dann wird es von PHP für JSON als Objekt statt als Array kodiert. Ich weiß nicht ob man das korrigieren sollte und falls ja an welcher Stelle das am besten abgefangen wird. In PHP ist das target-Objekt bewusst generisch implementiert und in der server.js fühlt es sich falsch an.