Code Monkey home page Code Monkey logo

beattogether.masterserver's Introduction

BeatTogether

A multiplayer private server for the modding community. Supports crossplay between PC and Quest. This is the PC Plugin.

Feel free to join our Discord! https://discord.com/invite/gezGrFG4tz (Support, Coordinating games with friends, etc)

Want to support development and server costs? Click Here

Features

  • Private server free from Beat Saber official; allowing Quest to play freely on modded installs
  • Crossplay between all compatible platforms
  • Custom songs between platforms
  • 10 Player lobbies

Requirements

This version supports Beat Saber 1.29+ with mods:

These can be downloaded from BeatMods or using Mod Assistant.

Installation

Recommended Install:

The easiest way to install is through ModAssistant!

Manual Install:

To install, Download the latest mod from our releases. Click Here

Extract the zip file to your Beat Saber game directory (the one Beat Saber.exe is in). The BeatTogether.dll should end up in your Plugins folder (NOT the one in Beat Saber_Data).

beattogether.masterserver's People

Contributors

23doors avatar chandler14362 avatar cubicgraphics avatar goobwabber avatar kevman95 avatar michael-r-elp avatar pythonology avatar raftario avatar roydejong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

beattogether.masterserver's Issues

How do I run it?

Hi, I would like to run BeatTogether server to solve the problem of difficult connection in China, is there any documentation available?
I tried to run it directly with docker, but I encountered an error, are there some steps missing?

logs (click to expand)
PS C:\Users\WGzeyu> docker run ghcr.io/pythonology/beat-together-master-server:sha-5c455cd
Unhandled exception. RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable
 ---> System.AggregateException: One or more errors occurred. (Connection failed)
 ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed
 ---> System.Net.Sockets.SocketException (111): Connection refused
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
--- End of stack trace from previous location ---
   at RabbitMQ.Client.Impl.TcpClientAdapter.ConnectAsync(String host, Int32 port)
   at RabbitMQ.Client.Impl.TaskExtensions.TimeoutAfter(Task task, TimeSpan timeout)
   at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectOrFail(ITcpClient socket, AmqpTcpEndpoint endpoint, TimeSpan timeout)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectOrFail(ITcpClient socket, AmqpTcpEndpoint endpoint, TimeSpan timeout)
   at RabbitMQ.Client.Impl.SocketFrameHandler.ConnectUsingAddressFamily(AmqpTcpEndpoint endpoint, Func`2 socketFactory, TimeSpan timeout, AddressFamily family)
   at RabbitMQ.Client.Impl.SocketFrameHandler..ctor(AmqpTcpEndpoint endpoint, Func`2 socketFactory, TimeSpan connectionTimeout, TimeSpan readTimeout, TimeSpan writeTimeout)
   at RabbitMQ.Client.ConnectionFactory.CreateFrameHandler(AmqpTcpEndpoint endpoint)
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   at RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(IEndpointResolver endpoints)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(String clientProvidedName)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection()
   at Autobus.Transports.RabbitMQ.RabbitMQTransportBuilder.Build()
   at Autobus.AutobusBuilder.UseTransport[TTransportBuilder](Action`1 onBuild)
   at Autobus.AutobusBuilderExtensions.UseRabbitMQTransport(IAutobusBuilder builder, Action`1 onBuild)
   at BeatTogether.Extensions.AutobusBuilderExtensions.UseRabbitMQTransport(IAutobusBuilder autobusBuilder, IConfiguration configuration)
   at BeatTogether.Extensions.HostBuilderExtensions.<>c.<UseAutobus>b__0_0(HostBuilderContext hostBuilderContext, IAutobusBuilder builder)
   at Autobus.HostBuilderExtensions.<>c__DisplayClass1_1.<UseAutobus>b__1(IServiceProvider _)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at BeatTogether.MasterServer.Program.Main(String[] args) in /app/BeatTogether.MasterServer/Program.cs:line 9

[Question] Cannot connect to self-hosted server (CFR-3)

Hi, I'm trying to deploy a BeatTogether server by myself, but only receiving CFR-3 error.

The reason was that BeatTogether was not released at that time, so I was trying hosting a server with latest source code to see if it works. I tried building the latest BeatTogether mod and hosting the master & dedicated server on a Raspberry Pi in internal network and a server with public IP on the Internet, but couldn't connect to both these servers in game (1.18.2 and 1.18.3). The commit I used is noted below, and you can see the commit is very close to the released version, only missing the quick match part.

Repo Commit Commit Message
BeatTogether.MasterServer 741e33dd actually matchmake
BeatTogether.DedicatedServer e4e5ae63 Revert "kev late bday present"
BeatTogether.Status.Api ae8e126f FIx quickplay pack config (2)

Then a few days ago I noticed BeatTogether was released, so I tried the server provided by yours (master.beattogether.systems) with latest version of BT and MPEX. I could join the server, but the network isn't stable from my region, only having about 10-20% chance to connect to the server. And I was still confused why my server is not working, since the same configuration can be run for the older version of BT server (for 1.13.2-1.16.2), so I'm still trying my server. I tried the latest docker images of BT server, which is from the latest commit, but still not working.

I was thinking it's a bug of dedicated server before BT released, since the dedicated server said the user is not connected to it. To help debugging, I wrote a UDP proxy server to track the traffic:

HOST=master.beattogether.systems PORTS=2328,3000-50000 node .

And it's interesting that when connecting to master.beattogether.systems, the client only tried communicating with the master server and didn't connect to the dedicated server (or maybe I missed something?), so I think the issue is related to master server and open the issue here.

Maybe I'm missing some critic configuration? Since the configuration in the repo has removed some part like MasterServer, DedicatedServer, Messaging sections.

Here is what I tried:

  • Allow all UDP traffic in iptables.
  • Run the server with docker's host network, to let the host share the network with the containers without port forwarding.
    sudo docker run -d --net=host redis
    sudo docker run -d --net=host rabbitmq
    sudo docker run -d --net=host BeatTogether.MasterServer
    sudo docker run -d --net=host BeatTogether.DedicatedServer
    sudo docker run -d -p 42328:80 BeatTogether.Status.Api
  • Check the commit history and mofidy the appsettings.json file for both master server and dedicated server, to let them listen to 0.0.0.0. This setting is working when running previous release of BT server on a Raspberry Pi with 1.16.2 (only changing the Dockerfile by replacing linux-x64 to linux-arm).
    • appsettings.json for master server:
      {
        "MasterServer": {
          "EndPoint": "0.0.0.0:2328"
        },
        "Messaging": {
          "RabbitMQ": {
            "EndPoint": "amqp://127.0.0.1:5672"
          }
        },
        "Serilog": {
          "MinimumLevel": {
            "Default": "Verbose",
            "Override": {
              "Microsoft": "Warning"
            }
          },
          "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Async" ],
          "WriteTo": [
            { "Name": "Console" },
            {
              "Name": "Async",
              "Args": {
                "configure": [
                  {
                    "Name": "File",
                    "Args": {
                      "path": "logs/BeatTogether.MasterServer-{Date}.log",
                      "rollingInterval": "Day"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    • appsettings.json for dedicated server:
      {
        "DedicatedServer": {
          "HostName": "127.0.0.1",
          "BasePort": 30000,
          "RelayServers": {
            "MaximumSlots": 10000
          }
        },
        "Serilog": {
          "MinimumLevel": {
            "Default": "Verbose",
            "Override": {
              "Microsoft": "Warning"
            }
          },
          "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Async" ],
          "WriteTo": [
            { "Name": "Console" },
            {
              "Name": "Async",
              "Args": {
                "configure": [
                  {
                    "Name": "File",
                    "Args": {
                      "path": "logs/BeatTogether.DedicatedServer-{Date}.log",
                      "rollingInterval": "Day"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
  • Since dedicated server says timed out, I change the waiting time of dedicated server from 5000 ms to 60000 ms (for latest commit it's 10000).
    diff --git a/BeatTogether.DedicatedServer.Kernel/MatchmakingServer.cs b/BeatTogether.DedicatedServer.Kernel/MatchmakingServer.cs
    index 9cab1fb..f6952ef 100644
    --- a/BeatTogether.DedicatedServer.Kernel/MatchmakingServer.cs
    +++ b/BeatTogether.DedicatedServer.Kernel/MatchmakingServer.cs
    @@ -86,7 +86,7 @@ namespace BeatTogether.DedicatedServer.Kernel
    
             // Millesecond timing constants
             private const int _eventPollDelay = 10;
    -        private const int _waitForPlayerTimeLimit = 5000;
    +        private const int _waitForPlayerTimeLimit = 60000;
    
             // Second timing constants
             private const float _syncTimeDelay = 5f;
  • I notice the source code of master server includes an expired certificate for localhost, so I change the certificate to the server's SSL certificate and its keygen, which is signed by Let's Encrypt, so it should be a valid and non-expired certificate.
    sudo docker cp ./key.pem beat-together-dedicated-server:/app/key.pem
    sudo docker cp ./cert.pem beat-together-dedicated-server:/app/cert.pem
    sudo docker cp ./cert.pem beat-together-master-server:/app/cert.pem
    sudo docker cp ./key.pem beat-together-master-server:/app/key.pem
    sudo docker restart beat-together-status-api beat-together-dedicated-server beat-together-master-server
    • I tried the fullchain.pem and keygen.pem, it didn't work
    • The root certificate of LE was expired last month, and it causes some issue on Android, removing that part will fix the Android issue, so I did that but no luck for BT
    • I tried the cert.pem (no chaining) and it didn't work
    • Tried putting the certificate under the dedicated server, and you know the results
    • BTW I think the certificate is required, since from the UDP proxy's log, I can see master.beattogether.systems returns a certificate of btogether.xn--9o8hpe.ws. The name doesn't match but I think it doesn't matter since I see BT mod has skipped the certificate validation part, and the old default localhost certificate works before
  • Modify the appsettings.json file for api server, to let it returns the same result from master.beattogether.systems.
    {
      "Status": {
        "MinimumAppVersion": "1.17.1"
      },
      "Quickplay": {
        "PredefinedPacks": [
          {
            "order": 0,
            "packId": "ALL_LEVEL_PACKS"
          },
          {
            "order": 1,
            "packId": "BUILT_IN_LEVEL_PACKS"
          }
        ],
        "LocalizedCustomPacks": [
          {
            "serializedName": "customlevels",
            "order": 2,
            "localizedNames": [
              {
                "language": "English",
                "packName": "Custom"
              }
            ],
            "packIds": [
              "custom_levelpack_CustomLevels"
            ]
          }
        ]
      },
      "Serilog": {
        "File": {
          "Path": "logs/BeatTogether.Status.Api-{Date}.log"
        }
      }
    }
  • Run the server with the latest released docker images (build by GitHub), and do all the same things above.
    sudo docker pull ghcr.io/pythonology/beat-together-dedicated-server:sha-bc87c8f
    sudo docker pull ghcr.io/pythonology/beat-together-master-server:sha-5c455cd
    sudo docker pull ghcr.io/pythonology/beat-together-status-api:sha-ae8e126
    sudo docker run --net=host --name beat-together-master-server -d ghcr.io/pythonology/beat-together-master-server:sha-5c455cd
    sudo docker run --net=host --name beat-together-dedicated-server -d ghcr.io/pythonology/beat-together-dedicated-server:sha-bc87c8f
    sudo docker run -p 42328:80 --name beat-together-status-api 584f0e48dcdb -d ghcr.io/pythonology/beat-together-status-api:sha-ae8e126

Here is the log outputed from the server (binary data in the log is removed, since I think it may contains some sensitive information, if it's required to debug, please let me know and I'll upload it):

docker logs (click to expand)
[-- Master --][14:07:57 DBG] Hosting starting
[-- Master --][14:08:02 DBG] Binding to DedicatedServer, BeatTogether.DedicatedServer.Interface.Events.MatchmakingServerStoppedEvent
[-- Master --][14:08:02 INF] Starting master server (EndPoint='0.0.0.0:2328').
[-- Master --][14:08:02 INF] Application started. Press Ctrl+C to shut down.
[-- Master --][14:08:02 INF] Hosting environment: Production
[-- Master --][14:08:02 INF] Content root path: /app
[-- Master --][14:08:02 DBG] Hosting started
[-- Master --][14:08:30 INF] Application is shutting down...
[-- Master --][14:08:30 DBG] Hosting stopping
[-- Master --][14:08:30 INF] Stopping master server (EndPoint='0.0.0.0:2328').
[-- Master --][14:08:30 DBG] Unbinding from DedicatedServer, BeatTogether.DedicatedServer.Interface.Events.MatchmakingServerStoppedEvent
[-- Master --][14:08:30 DBG] Hosting stopped
[-- Master --][14:08:32 DBG] Hosting starting
[-- Status --][14:07:56 INF] Now listening on: http://[::]:80
[-- Status --][14:07:56 INF] Application started. Press Ctrl+C to shut down.
[-- Status --][14:07:56 INF] Hosting environment: Production
[-- Status --][14:07:56 INF] Content root path: /app
[-- Status --][14:08:26 INF] Application is shutting down...
[-- Status --][14:08:29 INF] Now listening on: http://[::]:80
[-- Status --][14:08:29 INF] Application started. Press Ctrl+C to shut down.
[-- Status --][14:08:29 INF] Hosting environment: Production
[-- Status --][14:08:29 INF] Content root path: /app
[-- Dedica --][14:07:56 DBG] Hosting starting
[-- Dedica --][14:08:03 DBG] Binding to DedicatedServer, BeatTogether.DedicatedServer.Interface.Requests.CreateMatchmakingServerRequest
[-- Dedica --][14:08:03 DBG] Binding to MasterServer, BeatTogether.MasterServer.Interface.Events.PlayerConnectedToMatchmakingServerEvent
[-- Dedica --][14:08:03 INF] Application started. Press Ctrl+C to shut down.
[-- Dedica --][14:08:03 INF] Hosting environment: Production
[-- Dedica --][14:08:03 INF] Content root path: /app
[-- Dedica --][14:08:03 DBG] Hosting started
[-- Dedica --][14:08:28 INF] Application is shutting down...
[-- Dedica --][14:08:28 DBG] Hosting stopping
[-- Dedica --][14:08:28 DBG] Unbinding from MasterServer, BeatTogether.MasterServer.Interface.Events.PlayerConnectedToMatchmakingServerEvent
[-- Dedica --][14:08:29 DBG] Hosting stopped
[-- Dedica --][14:08:30 DBG] Hosting starting
[-- Dedica --][14:08:35 DBG] Binding to DedicatedServer, BeatTogether.DedicatedServer.Interface.Requests.CreateMatchmakingServerRequest
[-- Dedica --][14:08:35 DBG] Binding to MasterServer, BeatTogether.MasterServer.Interface.Events.PlayerConnectedToMatchmakingServerEvent
[-- Dedica --][14:08:35 INF] Application started. Press Ctrl+C to shut down.
[-- Dedica --][14:08:35 INF] Hosting environment: Production
[-- Dedica --][14:08:35 INF] Content root path: /app
[-- Dedica --][14:08:35 DBG] Hosting started
[-- Master --][14:08:36 DBG] Binding to DedicatedServer, BeatTogether.DedicatedServer.Interface.Events.MatchmakingServerStoppedEvent
[-- Master --][14:08:36 INF] Starting master server (EndPoint='0.0.0.0:2328').
[-- Master --][14:08:36 INF] Application started. Press Ctrl+C to shut down.
[-- Master --][14:08:36 INF] Hosting environment: Production
[-- Master --][14:08:36 INF] Content root path: /app
[-- Master --][14:08:36 DBG] Hosting started
[-- Status --][14:09:11 INF] Request starting HTTP/1.1 GET http://<hostname>:42328/status/mp_override.json - -
[-- Status --][14:09:11 INF] Executing endpoint 'BeatTogether.Status.Api.Controllers.QuickplayController.Get (BeatTogether.Status.Api)'
[-- Status --][14:09:11 INF] Route matched with {action = "Get", controller = "Quickplay"}. Executing controller action with signature BeatTogether.Status.Api.Models.MasterServerQuickplayData Get() on controller BeatTogether.Status.Api.Controllers.QuickplayController (BeatTogether.Status.Api).
[-- Status --][14:09:11 INF] Executing ObjectResult, writing value of type 'BeatTogether.Status.Api.Models.MasterServerQuickplayData'.
[-- Status --][14:09:12 INF] Executed action BeatTogether.Status.Api.Controllers.QuickplayController.Get (BeatTogether.Status.Api) in 112.9117ms
[-- Status --][14:09:12 INF] Executed endpoint 'BeatTogether.Status.Api.Controllers.QuickplayController.Get (BeatTogether.Status.Api)'
[-- Status --][14:09:12 INF] Request finished HTTP/1.1 GET http://<hostname>:42328/status/mp_override.json - - - 200 - application/json;+charset=utf-8 293.9759ms
[-- Status --][14:09:12 INF] Request starting HTTP/1.1 GET http://<hostname>:42328/status/mp_override.json - -
[-- Status --][14:09:12 INF] Executing endpoint 'BeatTogether.Status.Api.Controllers.QuickplayController.Get (BeatTogether.Status.Api)'
[-- Status --][14:09:12 INF] Route matched with {action = "Get", controller = "Quickplay"}. Executing controller action with signature BeatTogether.Status.Api.Models.MasterServerQuickplayData Get() on controller BeatTogether.Status.Api.Controllers.QuickplayController (BeatTogether.Status.Api).
[-- Status --][14:09:12 INF] Executing ObjectResult, writing value of type 'BeatTogether.Status.Api.Models.MasterServerQuickplayData'.
[-- Status --][14:09:12 INF] Executed action BeatTogether.Status.Api.Controllers.QuickplayController.Get (BeatTogether.Status.Api) in 2.9635ms
[-- Status --][14:09:12 INF] Executed endpoint 'BeatTogether.Status.Api.Controllers.QuickplayController.Get (BeatTogether.Status.Api)'
[-- Status --][14:09:12 INF] Request finished HTTP/1.1 GET http://<hostname>:42328/status/mp_override.json - - - 200 - application/json;+charset=utf-8 6.0212ms
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Opening session (EndPoint='<EndPoint>').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling ClientHelloRequest (Random='<Random-1>').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling ClientHelloWithCookieRequest (CertificateResponseId=<RequestId-1>, Random='<Random-1>', Cookie='<Cookie-1>').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Received acknowledgement for request (RequestId=<RequestId-1>, MessageHandled=True).
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Received acknowledgement for request (RequestId=<RequestId-2>, MessageHandled=True).
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling ClientKeyExchange (ClientPublicKey='<ClientPublicKey>').
[-- Master --][14:09:20 INF] Session established (EndPoint='<EndPoint>').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Received acknowledgement for request (RequestId=<RequestId-3>, MessageHandled=True).
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling AuthenticateUserRequest (Platform=Steam, UserId='<UserId>', UserName='<UserName>').
[-- Master --][14:09:20 INF] Session authenticated (EndPoint='<EndPoint>', Platform=Steam, UserId='<UserId>', UserName='<UserName>').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Received acknowledgement for request (RequestId=<RequestId-4>, MessageHandled=True).
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:20 VRB] Handling SessionKeepalive (EndPoint='<EndPoint>', Platform=Steam, UserId='<UserId>', UserName='<UserName>').
[-- Master --][14:09:20 VRB] Handling ConnectToMatchmakingServerRequest (UserId='<ManagerId>', UserName='<UserName>', Random='<Random-1>', PublicKey='<PublicKey-1>', BeatmapDifficultyMask=All, GameplayModifiersMask=All, Secret='<Secret-1>', Code='').
[-- Dedica --][14:09:21 INF] Starting matchmaking server (Port=30001,Secret='<Secret-1>', ManagerId='<ManagerId>', MaxPlayerCount=2, DiscoveryPolicy=WithCode, InvitePolicy=OnlyConnectionOwnerCanInvite, GameplayServerMode=Managed, SongSelectionMode=OwnerPicks, GameplayServerControlSettings=All).
[-- Dedica --][14:09:21 VRB] Adding encrypted end point (RemoteEndPoint='<EndPoint>', Random='<Random-1>', PublicKey='<PublicKey-1>').
[-- Master --][14:09:23 INF] Connected to matchmaking server!
[-- Master --][14:09:23 INF] Random='<Random-1>'
[-- Master --][14:09:23 INF] PublicKey='<PublicKey-1>'
[-- Master --][14:09:23 INF] session.ClientRandom='<Random-1>'
[-- Master --][14:09:23 INF] session.ClientPublicKey='<ClientPublicKey>'
[-- Master --][14:09:23 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:23 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:23 VRB] Received acknowledgement for request (RequestId=<RequestId-4>, MessageHandled=True).
[-- Dedica --][14:09:31 WRN] Timed out waiting for player to join, stopping server.
[-- Dedica --][14:09:31 INF] Stopping matchmaking server (Port=30001,Secret='<Secret-1>', ManagerId='<ManagerId>', MaxPlayerCount=2, DiscoveryPolicy=WithCode, InvitePolicy=OnlyConnectionOwnerCanInvite, GameplayServerMode=Managed, SongSelectionMode=OwnerPicks, GameplayServerControlSettings=All).
[-- Master --][14:09:31 DBG] Handling MatchmakingServerStoppedEvent (Secret='<Secret-1>').
[-- Master --][14:09:46 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:46 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:46 VRB] Handling ConnectToMatchmakingServerRequest (UserId='<ManagerId>', UserName='<UserName>', Random='<Random-2>', PublicKey='<PublicKey-2>', BeatmapDifficultyMask=All, GameplayModifiersMask=All, Secret='<Secret-2>', Code='').
[-- Dedica --][14:09:46 INF] Starting matchmaking server (Port=30001,Secret='<Secret-2>', ManagerId='<ManagerId>', MaxPlayerCount=2, DiscoveryPolicy=WithCode, InvitePolicy=OnlyConnectionOwnerCanInvite, GameplayServerMode=Managed, SongSelectionMode=OwnerPicks, GameplayServerControlSettings=All).
[-- Dedica --][14:09:46 VRB] Adding encrypted end point (RemoteEndPoint='<EndPoint>', Random='<Random-2>', PublicKey='<PublicKey-2>').
[-- Master --][14:09:48 INF] Connected to matchmaking server!
[-- Master --][14:09:48 INF] Random='<Random-2>'
[-- Master --][14:09:48 INF] PublicKey='<PublicKey-2>'
[-- Master --][14:09:48 INF] session.ClientRandom='<Random-1>'
[-- Master --][14:09:48 INF] session.ClientPublicKey='<ClientPublicKey>'
[-- Master --][14:09:48 VRB] Handling OnSent (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:48 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:09:48 VRB] Received acknowledgement for request (RequestId=<RequestId-5>, MessageHandled=True).
[-- Dedica --][14:09:56 WRN] Timed out waiting for player to join, stopping server.
[-- Dedica --][14:09:56 INF] Stopping matchmaking server (Port=30001,Secret='<Secret-2>', ManagerId='<ManagerId>', MaxPlayerCount=2, DiscoveryPolicy=WithCode, InvitePolicy=OnlyConnectionOwnerCanInvite, GameplayServerMode=Managed, SongSelectionMode=OwnerPicks, GameplayServerControlSettings=All).
[-- Master --][14:09:56 DBG] Handling MatchmakingServerStoppedEvent (Secret='<Secret-2>').
[-- Master --][14:10:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:10:20 VRB] Handling SessionKeepalive (EndPoint='<EndPoint>', Platform=Steam, UserId='<UserId>', UserName='<UserName>').
[-- Master --][14:11:20 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:11:20 VRB] Handling SessionKeepalive (EndPoint='<EndPoint>', Platform=Steam, UserId='<UserId>', UserName='<UserName>').
[-- Master --][14:12:22 VRB] Handling OnReceived (EndPoint='<EndPoint>', Data='[DELETED]').
[-- Master --][14:12:22 VRB] Handling SessionKeepalive (EndPoint='<EndPoint>', Platform=Steam, UserId='<UserId>', UserName='<UserName>').

[Request] Add Redis configuration file

I've been trying to experiment with the mod and the server but the server crashes on a Redis exception.

Wrong number of args calling Redis command From Lua script

BeatTogether.MasterServer.Data/Implementations/Repositories/ServerRepository Line 64
Being called by
BeatTogether.MasterServer.Kernel/Implementations/UserService Line 119

I think this is due to the fact that I don't have Redis configured correctly.

Could you add the configuration file required for Redis to run?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.