Jump to content

potoelite

Community Members
  • Posts

    12
  • Joined

  • Last visited

Posts posted by potoelite

  1. I have revised the conf file, but when I start the echlon, there are still warning messages;

    2022-08-19 16:09:31 INFO     JID set to: echelon@ec2-54-174-96-13.compute-1.amazonaws.com/CC
    2022-08-19 16:09:31 INFO     EcheLOn started
    /usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py:72: SAWarning: relationship 'PlayerInfo.player' will copy column players.id to column players_info.player_id, which conflicts with relationship(s): 'Player.games' (copies players.id to players_info.player_id). If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="games"' to the 'PlayerInfo.player' relationship. (Background on this error at: https://sqlalche.me/e/14/qzyx)
      player = self.db.query(Player).filter(func.lower(Player.jid) == str(jid).lower()).first()
    /usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py:72: SAWarning: relationship 'Player.games_info' will copy column players.id to column players_info.player_id, which conflicts with relationship(s): 'Player.games' (copies players.id to players_info.player_id). If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="games"' to the 'Player.games_info' relationship. (Background on this error at: https://sqlalche.me/e/14/qzyx)
      player = self.db.query(Player).filter(func.lower(Player.jid) == str(jid).lower()).first()
    /usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py:72: SAWarning: relationship 'PlayerInfo.game' will copy column games.id to column players_info.game_id, which conflicts with relationship(s): 'Player.games' (copies games.id to players_info.game_id). If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="games"' to the 'PlayerInfo.game' relationship. (Background on this error at: https://sqlalche.me/e/14/qzyx)
      player = self.db.query(Player).filter(func.lower(Player.jid) == str(jid).lower()).first()
    /usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py:72: SAWarning: relationship 'Game.player_info' will copy column games.id to column players_info.game_id, which conflicts with relationship(s): 'Player.games' (copies games.id to players_info.game_id). If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="games"' to the 'Game.player_info' relationship. (Background on this error at: https://sqlalche.me/e/14/qzyx)
      player = self.db.query(Player).filter(func.lower(Player.jid) == str(jid).lower()).first()
    /usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py:72: SAWarning: relationship 'Game.players' will copy column games.id to column players_info.game_id, which conflicts with relationship(s): 'Game.player_info' (copies games.id to players_info.game_id), 'Player.games' (copies games.id to players_info.game_id), 'PlayerInfo.game' (copies games.id to players_info.game_id). If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="game,games,player_info"' to the 'Game.players' relationship. (Background on this error at: https://sqlalche.me/e/14/qzyx)
      player = self.db.query(Player).filter(func.lower(Player.jid) == str(jid).lower()).first()
    /usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py:72: SAWarning: relationship 'Game.players' will copy column players.id to column players_info.player_id, which conflicts with relationship(s): 'Player.games' (copies players.id to players_info.player_id), 'Player.games_info' (copies players.id to players_info.player_id), 'PlayerInfo.player' (copies players.id to players_info.player_id). If this is not the intention, consider if these relationships should be linked with back_populates, or if viewonly=True should be applied to one or more if they are read-only. For the less common case that foreign key constraints are partially overlapping, the orm.foreign() annotation can be used to isolate the columns that should be written towards.   To silence this warning, add the parameter 'overlaps="games,games_info,player"' to the 'Game.players' relationship. (Background on this error at: https://sqlalche.me/e/14/qzyx)
      player = self.db.query(Player).filter(func.lower(Player.jid) == str(jid).lower()).first()
     

  2. This is my config file.

    listen:
      -
        port: 5222
        ip: "0.0.0.0"
        module: ejabberd_c2s
        max_stanza_size: 1048576
        shaper: c2s_shaper
        access: c2s
        starttls_required: false
      -
        port: 5223
        ip: "::"
        tls: true
        module: ejabberd_c2s
        max_stanza_size: 262144
        shaper: c2s_shaper
        access: c2s
        starttls_required: true
    ##  -
    ##    port: 5269
    ##    ip: "::"
    ##    module: ejabberd_s2s_in
    ##    max_stanza_size: 524288
      -
        port: 5443
        ip: "::"
        module: ejabberd_http
        tls: true
        request_handlers:
          /admin: ejabberd_web_admin
          /api: mod_http_api
          /bosh: mod_bosh
          /captcha: ejabberd_captcha
          /upload: mod_http_upload
          /ws: ejabberd_http_ws
      -
        port: 5280
        ip: "::"
        module: ejabberd_http
        request_handlers:
          /admin: ejabberd_web_admin
          /.well-known/acme-challenge: ejabberd_acme
      -
        port: 3478
        ip: "0.0.0.0"
        transport: udp
        module: ejabberd_stun
        # use_turn: true
        ## The server's public IPv4 address:
        # turn_ipv4_address: "54.174.96.13"
        ## The server's public IPv6 address:
        # turn_ipv6_address: "2001:db8::3"
      -
        port: 1883
        ip: "::"
        module: mod_mqtt
        backlog: 1000

    s2s_use_starttls: optional

    acl:
      local:
        user_regexp: ""
      loopback:
        ip:
          - 127.0.0.0/8
          - ::1/128
      admin:
        user: admin@ec2-54-174-96-13.compute-1.amazonaws.com
      validname:
        user_regexp: "^[0-9A-Za-z._-]{1,20}$"
      bots:
        user: xpartamupp@ec2-54-174-96-13.compute-1.amazonaws.com
        user: echelon@ec2-54-174-96-13.compute-1.amazonaws.com


    access_rules:
      local:
        allow: local
      c2s:
        deny: blocked
        allow: all
      announce:
        allow: admin
      configure:
        allow: admin
      muc_create:
        allow: local
      muc_admin:
        allow: admin, bots
      ipbots:
        allow: bots
      pubsub_createnode:
        allow: bots
      trusted_network:
        allow: loopback
      register:
        allow: validname

    api_permissions:
      "console commands":
        from:
          - ejabberd_ctl
        who: all
        what: "*"
      "admin access":
        who:
          access:
            allow:
              - acl: loopback
              - acl: admin
          oauth:
            scope: "ejabberd:admin"
            access:
              allow:
                - acl: loopback
                - acl: admin
        what:
          - "*"
          - "!stop"
          - "!start"
      "public commands":
        who:
          ip: 127.0.0.1/8
        what:
          - status
          - connected_users_number

    registration_timeout: 3600

    shaper:
      normal:
        rate: 3000
        burst_size: 20000
      fast: 100000

    shaper_rules:
      max_user_sessions: 10
      max_user_offline_messages:
        5000: admin
        100: all
      c2s_shaper:
        none: admin, bots
        normal: all
      s2s_shaper: fast

    modules:
      mod_ipstamp: {}
      mod_adhoc: {}
      mod_admin_extra: {}
      mod_announce:
        access: announce
      mod_avatar: {}
      mod_blocking: {}
      mod_bosh: {}
      mod_caps: {}
      mod_carboncopy: {}
      mod_client_state: {}
      mod_configure: {}
      mod_disco: {}
      mod_fail2ban: {}
      mod_http_api: {}
      mod_http_upload:
        put_url: https://@HOST@:5443/upload
        custom_headers:
          "Access-Control-Allow-Origin": "https://@HOST@"
          "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
          "Access-Control-Allow-Headers": "Content-Type"
      mod_last: {}
      mod_mam:
        ## Mnesia is limited to 2GB, better to use an SQL backend
        ## For small servers SQLite is a good fit and is very easy
        ## to configure. Uncomment this when you have SQL configured:
        ## db_type: sql
        assume_mam_usage: true
        default: always
      mod_mqtt: {}
      mod_muc_log:
       outdir: "/lobby/logs"
       file_format: plaintext
       timezone: universal
      mod_muc:
        access:
          - allow
        access_admin: muc_admin
        access_create: muc_admin
        access_persistent: muc_admin
        access_mam:
          - allow
        max_users: 5000
        default_room_options:
          mam: true
          max_users: 1000
          logging: true
          persistent: true
          allow_change_subj: false
          anonymous: false
      mod_muc_admin: {}
      mod_offline:
        access_max_user_messages: max_user_offline_messages
      mod_ping:
        send_pings: true
      mod_privacy: {}
      mod_private: {}
      mod_proxy65:
        access: local
        max_connections: 5
      mod_pubsub:
        access_createnode: pubsub_createnode
        plugins:
          - flat
          - pep
        force_node_config:
          ## Avoid buggy clients to make their bookmarks public
          storage:bookmarks:
            access_model: whitelist
      mod_push: {}
      mod_push_keepalive: {}
      mod_register:
        ## Only accept registration requests from the "trusted"
        ## network (see access_rules section above).
        ## Think twice before enabling registration from any
        ## address. See the Jabber SPAM Manifesto for details:
        ## https://github.com/ge0rg/jabber-spam-fighting-manifesto
        ## ip_access: trusted_network
        access: register
      mod_roster:
        versioning: true
      mod_s2s_dialback: {}
    #  mod_shared_roster: {}
      mod_stream_mgmt:
        resend_on_timeout: if_offline
      mod_stun_disco: {}
      mod_vcard: {}
      mod_vcard_xupdate: {}
      mod_version:
        show_os: false

    ### Local Variables:
    ### mode: yaml
    ### End:
    ### vim: set filetype=yaml tabstop=8
     

  3. Hi, thanks again for your help.

    Now I can do hosting & joining games, and chat with other players.

    But, there are still not working issue.

    Leaderboard and profile lookup don't work for now.

    I found that rating bot uses sql database, unlike you said before.

    According to the installation guide, I have created new sql db file called lobby_rankings.sqlite3 by running command python3 lobby_ranking.py create.

    But when I run the echelon.py, bunch of sql db errors appear.

    For example, when I search player on proflie lookup, then following error is shown.

    KeyError: 'rating'
    2022-08-19 14:20:07 ERROR    Failed to send profile about  to
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py", line 625, in _iq_profile_handler
        self._send_profile(iq, iq['profile']['command'])
      File "/usr/local/lib/python3.7/site-packages/XpartaMuPP-0.24-py3.7.egg/xpartamupp/echelon.py", line 733, in _send_profile
        stanza.add_item(player_nick, stats['rating'], stats['highestRating'],

    Could you please explain how to fix this?

  4. Hi @Dunedanthanks for your help! Now I can connect with my account into multiplayer lobby, but I have one more problem.

    When Im going to host new game, it fails with the error dialog saying "Cannot host game.. Failed to host via STUN".

    But when I disable the checkbox "Use STUN to work around firewalls", it works.

    So i guess the reason is because of STUN configuration in ejabberd, but I'm not sure which one needs to be modified.

    This is STUN related setting in ejabberd config file.

    port: 3478

    ip: "0.0.0.0

    transport: udp

    module: ejabberd_stun

    use_turn: true

    turn_ipv4_address: "x.x.x.x

    Thanks for your advices.

     

  5. 3 hours ago, potoelite said:

    In existing 0 A.D game's multiplayer lobby, it sends response after the player connected to lobby.

    {"time": 166032701, "historic": false "level": "connected", "type": "system"}

    {"time": 166032702, "historic": false "level": "subject", "type": "chat", "nick": "user1", "subject": "This is the svn multiplayer lobby,\n\n If you want to play..."}

    {"time": 166032702, "historic": false "level": "gamelist", "type": "game"}

    I just tried to print response messages when new ones arrived from lobby server.

    Above statements are arrived when the game uses current 0A.D's multiplayer lobby.

    But after I have replaced it with my own server, nothing arrives.

    Also I'm wondering about who sends this message to the game client.

    Because I can't find any string resource like "This is the svn multiplayer lobby,\n\n If you want to play..." anywhere. There aren't any such string in source code of the game and multiplayer lobby.

  6. 27 minutes ago, Dunedan said:

    At that point the bots play no role yet, so you can ignore everything related to the bots

    So this means that hosting/joining game is impossible even after all is configured well?

    28 minutes ago, Dunedan said:

    To help you further we'd need some more information, like the 0ad configuration options you used, screenshots of the problem and a debug log from ejabberd.

    Thanks, let me share my configuration information.
    First, following is my default.cfg lobby settings

    [lobby]
    history = 0                         ; Number of past messages to display on join
    room = "arena"                    ; Default MUC room to join
    server = "ec2-54-174-96-13.compute-1.amazonaws.com"  ; Address of lobby server
    tls = false                          ; Whether to use TLS encryption when connecting to the server.
    verify_certificate = false          ; Whether to reject connecting to the lobby if the TLS certificate is invalid (TODO: wait for Gloox GnuTLS trust implementation to be fixed)
    terms_url = "https://dummpy.com"; Allows the user to save the text and print the terms
    terms_of_service = "1"              ; Version (hash) of the Terms of Service that the user has accepted
    terms_of_use = "1"                  ; Version (hash) of the Terms of Use that the user has accepted
    privacy_policy = "1"                ; Version (hash) of the Privacy Policy that the user has accepted
    xpartamupp = "xpartamupp"             ; Name of the server-side XMPP-account that manage games
    echelon = "echelon"               ; Name of the server-side XMPP-account that manages ratings
    buddies = ","                       ; Comma separated list of playernames that the current user has marked as buddies
    rememberpassword = true             ; Whether to store the encrypted password in the user config
     
    [lobby.columns]
    gamerating = false                  ; Show the average rating of the participating players in a column of the gamelist
     
    [lobby.stun]
    enabled = true                       ; The STUN protocol allows hosting games without configuring the firewall and router.
                                         ; If STUN is disabled, the game relies on direct connection, UPnP and port forwarding.
    server = "ec2-54-174-96-13.compute-1.amazonaws.com"   ; Address of the STUN server.
    port = 3478                          ; Port of the STUN server.
    delay = 200                          ; Duration in milliseconds that is waited between STUN messages.
                                         ; Smaller numbers speed up joins but also become less stable.

    I have configured ejabberd on aws ec2 instance.

    As I said, I can register new account in game and after I try to connect, the game keep says "connecting...", but ejabbered log and web admin says the account is connected and online. 

    This is ejabberd log statements, I disabled TLS in authetication.
    2022-08-13 16:30:06.144478+00:00 [info] <0.777.0>@ejabberd_listener:accept/7:273 (<0.4170.0>) Accepted connection 188.43.235.177:17278 -> 172.31.28.90:5222
    2022-08-13 16:30:06.669178+00:00 [info] <0.4170.0>@ejabberd_c2s:process_auth_result/3:268 (tcp|<0.4170.0>) Accepted c2s SCRAM-SHA-1 authentication for qwe@ec2-54-174-96-13.compute-1.amazonaws.com by mnesia backend from 188.43.235.177
    2022-08-13 16:30:07.161255+00:00 [info] <0.4170.0>@ejabberd_c2s:bind/2:446 (tcp|<0.4170.0>) Opened c2s session for qwe@ec2-54-174-96-13.compute-1.amazonaws.com/0ad-2CA544C06C093BEE

    Screenshot_8.png.27c6b7cc13c37510f8621c3589c1590d.png

    Above is what ejabberd admin page shows in users panel.

    By using other XMPP client like Pidgin, I can create account and login, chat there.

    But as the game uses encrypted password by itself, so I can't use the account create by game in other xmpp client as password is regarded incorrect.


     

  7. Hi, thanks for your reply.

    But I don't think this is because of UI. Its due to multiplayer lobby configuration I think.

    If you have completed guide to configure multiplayer lobby, please let me take a look at it.

    As I wrote above, something is missing so far, I can't go forward anymore. :(

  8. Hi, hope you are doing well.

    I've been trying to configure multiplayer lobby on my server, but I have some problems.

    According to the guide of installation of lobby bots here, I've configured ejabberd 22.05(latest) and executed xpartamupp.py and echelon.py scripts.

    And I've replaced original lobby options such as room name, lobby url, etc  according to new lobby server.

    At this point, I have following problems.

    - I can register new account to multiplayer lobby, so I can confirm this in ejabberd admin page also. But I can't login with created account in the game.

    Login dialog keeps saying "connecting..." after the connection is established. Why I think like this is because the account which I used is displayed as online status in ejabberd web admin, but not in the game. In ejabberd log, it also says new connection is opened.

    - Server returns nothing response.

    In existing 0 A.D game's multiplayer lobby, it sends response after the player connected to lobby.

    {"time": 166032701, "historic": false "level": "connected", "type": "system"}

    {"time": 166032702, "historic": false "level": "subject", "type": "chat", "nick": "user1", "subject": "This is the svn multiplayer lobby,\n\n If you want to play..."}

    {"time": 166032702, "historic": false "level": "gamelist", "type": "game"}

    But my server doesn't. It only sens response when the username and password are incorrect or unregister account is used.

     

    I guess there is one more component to be installed for proper work of multiplayer lobby on my side.

    There isn't any postgresql db handler on my model and both source code of game and multiplayer lobby-bots don't contain any one of above strings.

    Also, the weird thing is that github repo name is just "lobby-bots", not "lobby", which means entire name of system

    Please let me know how to fix this issue.

    Thanks in advance for your help!

     

    • Like 1
×
×
  • Create New...