EmergencyX | Masterserver für Em4

    • EmergencyX | Masterserver für Em4

      Servus,

      für den Emergency Explorer entwickeln wir momentan auch im Bereich Multiplayer und wir haben wohl einen Weg gefunden,
      wie wir den Emergency 4 "Master Server" wieder ans Netz bringen können.
      Also einfach ausprobieren und wenn es Probleme gibt, bitte hier melden.

      Jetzt online: Zum Serverbrowser
      Doch offline? Zum Uptimerobot


      Portfreigabe fürs Hosting von Multiplayerspielen
      - 58282 tcp
      - 12345 upd


      Was muss ich dafür tun?
      Nichts, der "Master Server" wird von Emergency 4 automatisch ausgewählt 8)
      Emergency prüft drei verschiedene URLs, hinter denen sich ein Matchmakingserver verbirgt.
      Zufällig war die erste Domain nicht mehr registriert. Deshalb haben wir uns entschieden, die Domain zu übernehmen.

      Was werden wir damit tun?
      Das Bestmögliche. Den Code werden wir in Kürze hier veröffentlichen, damit ihr Einsicht nehmen und Verbesserungen einbringen könnt.
      Der Server ist in Nodejs geschrieben, läuft soweit auch schon recht stabil und wird nun etwas aufpoliert (Codestyle, Modularisierung, Errorhandling).

      Kann man helfen?
      Wir suchen weiter Mitglieder, die uns bei solchen und ähnlichen coolen Entwicklungen helfen können.

      Ein Spiel ist online sichtbar, aber wird in EM4 selbst nicht gezeigt
      Antwort - es liegt vermutlich an IPv6


      Auch wenn wir die Spielerzahlen in der Anzeige erhöhen können, können leider weiter nur höchstens vier Spieler zusammen spielen :)
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von noBlubb () aus folgendem Grund: Uptimerobot verlinkt

    • Wir könnten ein paar frische Köpfe an der Sache gebrauchen - hier ist ein Muster drinnen und wir müssen es finden :)


      Eine Nachricht vom Spieler mit dem Namen "aaaaa":

      Quellcode

      1. a
      2. 00000002000000504d003017861acb6003d8
      3. aa
      4. 00000003000000534d003017861acb6005db00
      5. aaa
      6. 00000005000000564d003017861acb6007db60
      7. aaaa
      8. 00000006000000594d003017861acb6009db6c00
      9. aaaaa
      10. 00000008000000534d003017861acb67b6db00
      11. aaaaaa
      12. 000000090000005f4d003017861acb600ddb6db0
      13. aaaaaaa
      14. 0000000b000000624d003017861acb600fdb6db600
      15. aaaaaaaa
      16. 0000000c000000654d003017861acb6011db6db6c0
      17. aaaaaaaaa
      18. 0000000e000000684d003017861acb6013db6db6d8
      19. aaaaaaaaaa
      20. 0000000f0000006b4d003017861acb6015db6db6db00
      21. aaaaaaaaaaa
      22. 000000110000006e4d003017861acb6017db6db6db60
      23. aaaaaaaaaaaa
      24. 00000012000000714d003017861acb6019db6db6db6c00
      25. aaaaaaaaaaaaa
      26. 00000014000000744d003017861acb601bdb6db6db6d80
      27. aaaaaaaaaaaaaa
      28. 00000015000000774d003017861acb601ddb6db6db6db0
      29. aaaaaaaaaaaaaaa
      30. 000000170000007a4d003017861acb601fdb6db6db6db600
      31. aaaaaaaaaaaaaaaa
      32. 000000180000007d4d003017861acb6021db6db6db6db6c0
      Alles anzeigen





      Verschiedene Nachrichten, verschiedene Namen (Spielername => Nachricht):

      Quellcode

      1. yanni => aaaa 00000005 00000080 4d003017879a 30c1 badb1a6404 ef7ab8
      2. yanni => aaaa 00000029 00000080 4d003017879a 30c1 badb1a6404 ef7ab8
      3. yanni => bbbb 00000038 0000008c 4d003017879a 30c1 badb1a6404 e062bb6a80
      4. yanni => cccc 00000026 0000008c 4d003017879a 30c1 badb1a6404 e063bb6a80
      5. yanni => dddd 0000002a 0000008c 4d003017879a 30c1 badb1a6404 e064bb6a80
      6. ybnni => aaaa 0000000c 000000d0 4d003017879a 3141 badb1a6404 e061bb6a9f2eec2d7b367aaaa8
      7. ybnni => bbbb 0000000b 000000c1 4d003017879a 3141 badb1a6404 ef7abbfbbbaeb15d5eeee400
      8. ybnni => cccc 00000011 000000d0 4d003017879a 3141 badb1a6404 e063bb6a9f2eec2d7b367aaaa8

      Was erwarten wir?
      Kompression: Möglich. Client an Server ist nicht kodiert (siehe weiter unten), die Antwort (siehe oben) leider schon.
      Verschlüsselung: Unwahrscheinlich, wiederholendes Muster

      Wird eine kodierte Nachricht wiederholt, enthält sie immer den originalen Spielernamen, auch wenn sich dieser nicht in der Lobby befindet.

      Was wissen wir über das Format?
      Im zweiten Beispiel habe ich ein immer wieder beobachtetes Format hervorgehoben:
      4 Bytes am Start jeder Übertragung markieren einen fortlaufenden Counter, er ist nicht weiter relevant in den Beispielen. uint32 ergäbe Sinn.
      4 Bytes danach scheinen die Länge der Nachricht zu kodieren. Manchmal ist ein Bitshift um 4(!) Bits nach links dabei, zum Beispiel hier, wenn der Client an den Server sendet:

      JavaScript-Quellcode

      1. let re = require('iconv-lite');
      2. //Nachricht vorbereiten und von ascii nach ucs2 (UTF-16) konvertieren
      3. message = new Buffer("Have fun :)", 'ascii');
      4. encoded = re.encode(message, 'ucs2');
      5. header = Buffer.alloc(16);
      6. length = 4 + message.length;
      7. header.writeUInt32BE(id);
      8. id++;
      9. header.writeUInt32BE(length << 4, 4); //Hier besagter Shift
      10. header.write('4c000000', 8, 4, 'hex'); //Eine Art "Command-Typ"? (Nachricht vom Spieler an den Server)
      11. header.writeUInt32LE(message.length, 12); //Länge des Nachrichtenstrings. Nicht in Bytes! (message != encoded)
      12. client.write(Buffer.concat([header, encoded]));
      Alles anzeigen

      Oder auch hier nochmal, erneut, vom Client zum Server ist die Übertragung NICHT komprimiert. Der Server nimmt diese Nachricht an und sendet dann etwas im obigen Format an alle zurück.
      Sendet der Server nichts, erscheint auch die abgesendete Nachricht nicht im Chatverlauf.

      Quellcode

      1. //Bereich 1-10
      2. 00000001000000504c000000010000003100
      3. 00000002000000504c000000010000003200
      4. 00000003000000504c000000010000003300
      5. 00000004000000504c000000010000003400
      6. 00000005000000504c000000010000003500
      7. 00000006000000504c000000010000003600
      8. 00000007000000504c000000010000003700
      9. 00000008000000504c000000010000003800
      10. 00000009000000504c000000010000003900
      11. //Bereich 10-30
      12. 0000000a000000604c0000000200000031003000
      13. 0000000b000000604c0000000200000031003100
      14. 0000000c000000604c0000000200000031003200
      15. 0000000d000000604c0000000200000031003300
      16. 0000000e000000604c0000000200000031003400
      17. 0000000f000000604c0000000200000031003500
      18. 00000010000000604c0000000200000031003600
      19. 00000011000000604c0000000200000031003700
      20. 00000012000000604c0000000200000031003800
      21. 00000013000000604c0000000200000031003900
      22. 00000014000000604c0000000200000032003000
      23. 00000015000000604c0000000200000032003100
      24. 00000016000000604c0000000200000032003200
      25. 00000017000000604c0000000200000032003300
      26. 00000018000000604c0000000200000032003400
      27. 00000019000000604c0000000200000032003500
      28. 0000001a000000604c0000000200000032003600
      29. 0000001b000000604c0000000200000032003700
      30. 0000001c000000604c0000000200000032003800
      31. 0000001d000000604c0000000200000032003900
      32. 0000001e000000604c0000000200000033003000
      33. //Bereich 100 - 103
      34. 0000001f000000704c00000003000000310030003000
      35. 00000020000000704c00000003000000310030003100
      36. 00000021000000704c00000003000000310030003200
      37. 00000022000000704c00000003000000310030003300
      Alles anzeigen
      Ihr seht sehr schön, wie immer die 1 (Ascii 31) kodiert wird. Danach folgt ein 0-Byte, was an der UTF-16 Kodierung liegt.
      Weiter sieht man den Counter (8 Zeichen, 4 Bytes) und eben die verschobene Nachrichtenlänge (5, 6, 7). Das ist wohl kein Little-/Big-Edian Problem, sondern einfach nur verschoben.
      Es funktioniert jedenfalls so...

      Solltet ihr für eure Analysen mehr Informationen benötigen, meldet euch bitte und wir bemühen uns um eine Lösung.

      Vielen Dank!
      Ping @NicoB @Kreuzung @SEKboy @KillerConsti @den-fellow @Torcota @KillerConsti @Dartlak @L30 @TechPro @gerritkpunkt
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb
    • Wie schon im originalen EmergencyX Thread angekündigt, wollen wir nach und nach unser Angebot erweitern.

      Das geht schon:
      • Liveansicht - die Liste wird in Echtzeit aktualisiert
      • Banliste - anstößige Servernamen könnt ihr per PN melden
      Das kommt noch:
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von noBlubb ()

    • Wir wollten endlich einen Einblick haben, ob der Server denn auch genutzt wird und haben deshalb die letzten drei Tage anonym ausgewertet, wann wieviele Spieler Kontakt zum Multiplayerserver aufnehmen und wollten bei der Gelegenheit das Ergebnis mit euch teilen:


      Verwendete Spielversionen (0.4% in Version 1.0... :borg: )




      Übermittelte Sprache / Herkunft



      Spieleranzahl im zeitlichen Verlauf

      Daten die erfasst werden: Version, Sprache, Zeitpunkt des Kontakts
      Datenmenge: ~2700 Einträge
      Zeitraum: Seit dem 10.12.16, 16 Uhr

      An EMX haben wir auch weitergearbeitet, aber dazu an entsprechender Stelle bald mehr :santa:
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb
    • Wir möchten nun nochmals ein paar Daten teilen, da die Analyse nun schon etwas länger läuft und die Daten sich nun etwas normalisiert haben, sprich einzelen Peaks ggf. ausgeglichen wurden.

      Zunächst die verteilung der verwendeten Versionen:

      Hier ist interessant zu erwähnen, dass der Anteil des aktuellsten Patches (1.3) nochmal zurück gegangen ist, wenn auch um 0,4%.



      Als nächstes ein Blick auf die Sprachen in denen Emergency gespielt wird. Hier sieht man, dass sowohl, DE als auch US Anteile von je ca 1-2% verloren haben während z. B. die englischen und spanischen Spieler einen Zuwachs verzeichnen.



      Und hier der Graph den ich persönlich am interessantesten finde: Die Anzahl der Spieler im zeitlichen Verlauf. Wieder seit 11.12. Man kann sehen, dass wir das Allzeit hoch dieser 12 Tage (vom 12.12.) nur knapp verfehlt haben. Ich bin gespannt wie sich dieser Graph über die Feiertage / Ferien entwickelt.



      Wir sind in der Tat ein bisschen Stolz darauf verkünden zu können, dass wir heute sowohl die 10.000te FMS Sitzung für BFE abgewickelt haben und ebenfalls heute die eine Millionste FMS-Nachricht bearbeitet haben. Möglicherweiße werden wir außerdem im Laufe des Abends das 10.000 Multiplayer-Spieler über den Master-Server ausliefern.

      Wir freuen uns, dass der Service so fleißig benutzt wird und wünschen allen ein frohes Fest! :)
      Wenn EM4 bei euch ruckelt müsst ihr das Spiel wohl auf eine zeitgemäße Engine portieren....
    • ciajoe schrieb:

      Als nächstes ein Blick auf die Sprachen in denen Emergency gespielt wird. Hier sieht man, dass sowohl, DE als auch US Anteile von je ca 1-2% verloren haben während z. B. die englischen und spanischen Spieler einen Zuwachs verzeichnen.
      Über Steam gibt es nur die US-Version oder sind da die anderne Sprachen auch einstellbar? D.h. kann man davon ausgehen dass auch diverse andere Spieler als US laufen?
    • ciajoe schrieb:

      [...]
      Wir sind in der Tat ein bisschen Stolz darauf verkünden zu können, dass wir heute sowohl die 10.000te FMS Sitzung für BFE abgewickelt haben und ebenfalls heute die eine Millionste FMS-Nachricht bearbeitet haben.
      [...]

      Und dafür noch mal ein riesen Dankeschön! Ohne euren Service wären wir vermutlich nicht mehr wirklich in der Lage gewesen unser FMS Tool in diesem Rahmen bereitzustellen.

      Mich würde mal interessieren wie die Verteilung der Mods im Multiplayer aussieht, gibt es dazu auch Statistiken?
      Moderation || Benutzerbetreuung Notruf 112 & Rettungssimulationen

    • AaronKl schrieb:

      D.h. kann man davon ausgehen dass auch diverse andere Spieler als US laufen?
      Dazu kann ich tatäschlich akatuell keine definitive Analyse treffen. Das müsste man analysieren.

      Torcota schrieb:

      Mich würde mal interessieren wie die Verteilung der Mods im Multiplayer aussieht, gibt es dazu auch Statistiken?
      Tja... Das ist in der Mache. Leider, wie bereits öfter erwähnt, sind wir sozusagen unterbesetzt. :D Sobald wir erste Ergebnisse haben, werden wir diese gerne weitergeben. :)
      Wenn EM4 bei euch ruckelt müsst ihr das Spiel wohl auf eine zeitgemäße Engine portieren....
    • @'rotterdammi' whoops :D @AaronKl
      Es wird eine GUID mitgesendet, die ich aber bisher nicht mit in die strukturierte Analyse aufgenommen habe, weil sie nur selten wechselt, z.B.:

      80AE0E0A-5579-4015-9C1A-35F2F2CE5673 wurde seit dem 19.08. 45000x verwendet.
      9A4C534E-431F-4a17-97D4-D1682B19A054 30000x
      EDA12670-56B5-4459-BA21-D010F0E3EBA1 10000x
      8BB46398-17E7-455C-9648-C37281FBC835 1800x

      Eventuell weitere, das sind 15MB Textlog... :)Es gab keinen erkennbaren Zusammenhang zwischen Sprache, GUID und Version (trat abwechselnd in verschiedenen Konfigurationen auf).
      Zur Lokalisierung kann ich leider nicht viel sagen - das Upgrade auf 1.3.f war zum Beispiel für die Französische Version etwas größer, das könnte aber auch am Setup liegen (20kb).
      In meiner Installation (aber nicht über Steam) findet sich unter Emergency 4 Deluxe\Data\Lang nur ein de Ordner, keine andere Sprache.

      Fun fact: Um mit Emergency 2012 nicht zu interferieren, reagiert unser Server nur auf Emergency 4 und nur auf die Anfrage nach dem Matchmakingserver.
      Im Zeitraum seit dem 19.08. haben wir
      1900 Verbindungen von emergency2012 zurückgewiesen
      38 Verbindungen von theshow zurückgewiesen - mehr Infos dazu findet man auf der 16t Seite :)

      Dagegen haben wir bisher 86682 Verbindungen für Emergency 4 angenommen :thumbup:

      @Torcota
      Leider nein. Der Multiplayerserver schreibt seine Daten fleißig in eine Logdatei, an der ich seit dem letzten Release nicht mehr viel getan habe.
      Über die Zeit haben sich da 359MB Text angesammelt, die Analyse wäre ein mordsmäßiger Job fürchte ich. Wenn es sich ergibt, sollte man das auch auf eine strukturierte Ausgabe umstellen (Daten in DB, nicht einfach nur gemischt mit anderen Ausgaben in eine Textdatei schreiben...). Wenn jemand da Interesse hätte, einfach kurz melden.

      Ich guck hin und wieder rein, ob noch alles läuft und es läuft eigentlich immer ein BFEMP Spiel - macht gefühlt auch immer den größten Anteil aus (gerade 7 aus 15 Spielen) :D
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb
    • noBlubb schrieb:

      1900 Verbindungen von emergency2012 zurückgewiesen
      38 Verbindungen von theshow zurückgewiesen - mehr Infos dazu findet man auf der 16t Seite

      Dagegen haben wir bisher 86682 Verbindungen für Emergency 4 angenommen
      Na, das passt doch auch wunderbar hierzu. :rolleyes:
      Gesamtleitung || Benutzerbetreuung EMERGENCY | Benutzerbetreuung User Content | Innovation / Weiterentwicklung
    • Absolut, das hat mich auch motiviert nochmal die Daten genauer anzusehen. Ich finde das sehr beeindruckend, gemessen am Alter von EM4...

      @Torcota:
      Ein paar Zahlen konnte ich extrahieren, ich habe probiert möglichst eindeutige Daten auszuwählen.
      Die Logdatei ist zeilenbasiert. Ich habe in jeder Zeile also nach den folgenden Begriffen suchen lassen:

      "BFEMP"118449Allgemein
      "#mod=BFEMP"60727Format, das beim Abfragen der Sessions im Spiel verwendet wird (beim Laden des Serverbrowsers oder beim Klick auf Refresh)
      "Creating new session"51575Format, das beim Erstellen einer neuen Session erstellt wird.
      "server listening"480Meldung, die nach einem Absturz abgegeben wurde...

      Leider kann ich die genaue Anzahl an Sessions in Kombination mit Mods nicht so einfach extrahieren.
      Es sind aber Änderungen unterwegs, in Zukunft endlich bessere Statistiken zu erstellen.
      Schade, dass ich von den EM5 Entwicklern keine Infos mehr zur Multiplayer API erhalten konnte. Nachdem jetzt ein paar mehr Mods an den Start gehen, bin ich sehr gespannt auf die Entwicklung von EM5 in 2017 :santa:
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von noBlubb ()

    • Moin moin,
      es scheint so das euer Server down ist, es nicht der Test Server zu sehen, oder die Möglichkeit selber ein raum aufzumachen (hat gestern noch geklappt).
      Es erscheint eine Fehler Meldung das "Kann keine Verbindung zum Internet herstellen", über die Direkt IP geht es.

      einmal als kleinen hinweis für euch :)

      MfG Cheamp
    • Hey,

      vielen Dank für die Meldung.
      Tatsächlich hab ich seit dem ersten Alarm heute morgen 28.03.2017, 09:09 versucht den Server wieder ans Netz zu bekommen.
      Was genau passiert ist, werde ich noch aufarbeiten müssen, aber es scheint erstmal wieder alles gut zu laufen:
      stats.uptimerobot.com/JyLrGf1Aq

      Da waren viel zu viele Emails nötig (12 Stück...), aber etwa seit 28.03.2017, 22:30 sind wir wieder am Netz.

      Sollte es noch zu Problemen kommen, meldet euch bitte hier :)
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb

      Beitrag von klaus ferrano ()

      Dieser Beitrag wurde vom Autor gelöscht ().
    • Hey,

      da spielt uns leider der technische Fortschritt ein bisschen entgegen.
      EM4 verfügt nach meiner Erfahrung von sich aus über keine Unterstützung für IPv6, sondern nur IPv4.
      Letzterem gehen aber die verfügbaren Adressen aus und deshalb bieten Internetanbieter zunehmend
      Dual Stack Lite an, bei dem der IPv4 Verkehr über ein NAT geleitet wird. Damit wird dir keine eigene
      IPv4 mehr zugewiesen, sondern du teilst dir eine IPv4 und ausgehende Verbindungen werden auf einen
      zufälligen Port gelegt.

      Bei der Entwicklung von EM4 wurde aber die Annahme getroffen, dass du vollständige "Kontrolle" über
      die eigene IPv4 und alle Ports hast - manche Pakete werden an fix kodierte Ports gesendet. Falls
      wir mit der NAT dazwischen aber nicht genau den richtigen Port für dich treffen können, wird das
      Paket wohl an wen anderen gesendet.

      Auf der Seite des Masterservers können wir das vermutlich beheben, denn da können wir
      den Port der NAT erkennen und statt an den üblichen Port 12345 eben an diesen antworten.
      Wenn EM4 den Masterserver nach allen verfügbaren Spielen gefragt hat, wird aber nochmal
      jeder Server in der als Antwort erhaltenen Spieleliste angefragt und über diesen Teil haben
      wir keine Kontrolle. Erhält EM4 dabei aber keine Antwort, wird das Spiel nicht angezeigt.

      Eine einfache Kontrolle ist, ob du ohne geladene Mods im Serverbrowser unseren Testserver sehen kannst.
      Du kannst nie beitreten, aber es ist die minimalste korrekte Implementierung eines EM4 Servers.
      Wenn der sichtbar ist, wirst du sehr wahrscheinlich auch andere Spiele sehen. Falls nicht,
      wird es schwieriger.

      Wir haben vor einiger Zeit nach Leuten mit genau solchen Problemen gesucht, leider hat sich nie jemand
      zurückgemeldet. Ich hab das Projekt deshalb wieder ein bisschen zurückgestellt, denn anscheinend
      war es bisher nie schlimm genug und natürlich auch mit Hamachi, Tungle, etc. lösbar.

      Dass dein Server immer in unserem Onlinebrowser gezeigt wird, liegt daran, dass EM4 hier eine ausgehende
      Verbindung aufbaut und wir eine eigene IPv4 für den Server haben, die Antwort also immer entgegen nehmen
      können. Um zu prüfen, ob das Spiel auch wirklich verfügbar ist, müssten wir danach aktiv scannen und einen
      solchen "Portknocker" wollte ich bisher noch nicht implementieren, aber vielleicht ist das was für die Zukunft.



      Unser Rework des Masterservers soll genau solche Themen etwas besser analysieren, aber das braucht Zeit,
      weil ich momentan nur Dual Stack Lite Internet bekomme und EM4 nur mit Wine unter macOS ausführen kann,
      was erstaunlich gut funktioniert, aber Analysen unnötig erschwert :)

      Leider musste auch das ein bisschen nach hinten rücken, weil die versix - API seit Anfang Juni nicht mehr korrekt funktionierte.
      Diese API nutzt EM4 um überhaupt erst den Masterserver und andere Infos zum Spiel zu finden. Dabei verwendet EM4
      eine kaputte Implementierung des HTTP 1.0 Protokolls, was bisher bewundernswerter Weise nie zu Problemen geführt hatte.
      Nach einem Upgrade des Webservers wurden die Anfragen aber wohl besser validiert und nun (korrekterweise) abgelehnt.
      Wir haben also selbst einen kaputten Webserver entwickelt, der jetzt wieder munter mit EM4 spricht (20224 Verbindungen seit Mitte Juni).

      TL;DR:
      EM4 fragt den Master nach eine Spieleliste. Sobald es dieses erhalten hat, prüft es von dir ausgehend jeden
      einzelnen Server in der Spielliste (um zum Beispiel die Latenz anzuzeigen). Antwortet ein Server nicht,
      etwa weil er über Dual Stack Lite verbunden ist, der IPv4 Verkehr deshalb über eine NAT geleitet wird
      und nun nicht mehr die Ports die EM4 vermutet bei ihm landen, wird er nicht angezeigt.
      [EM5] Emergency Explorer | [EM4] Masterserver | Das Original mit dem Blubb