public static MmApplication GetMm(ushort mmPort, ushort gamePort, GameApplication gameApplication, int maximumPlayers = 2, int mmTime = 10000, int ddosConnectionsLevel = 300, int ddosConnectionCheckInterval = 5000) { var socketFactory = new LiteNetSockFactory(); var serializer = new BinarySerializer(); var serverLogger = new ConsoleLogger("M ", LogLevel.Error | LogLevel.Info | LogLevel.Debug); var config = new ApplicationConfig { PublicDomainNameOrAddress = "127.0.0.1", ListenPorts = new List <ushort> { mmPort }, BindToPortHttp = 7002, MaxPacketSize = 300, BasePacketBufferSize = 64, SendTickTimeMs = 20, SocketTickTimeMs = 10, SocketType = SocketType.BareSocket, ReceiveTickTimeMs = 20, IsConnectionDdosProtectionOn = false }; var roomPropertiesProvider = new FakeRoomPropertiesProvider3(250, maximumPlayers, mmTime); var taskSchedulerFactory = new TaskSchedulerFactory(serverLogger); var requestSender = new FakeSenderWithGameApplication(gameApplication, new Dictionary <byte, object> { { PropertyCode.RoomProperties.GameMode, (byte)GameMode.SinglePlayer } }, CreateRoomDelegate, UpdateRoomDelegate); var _mmPacketSender = new PacketBatchSender(taskSchedulerFactory, config, serverLogger); var _playerManager = new PlayersManager(Mock.Of <IMmMetrics>(), serverLogger); //_serverProvider = new MatchMakerServerInfoProvider(requestSender, taskSchedulerFactory, config, _serverLogger, _statsProvider); var _serverProvider = new FakeMatchMakerServerInfoProvider(requestSender, "127.0.0.1", $"{gamePort}"); var roomApiProvider = new DefaultRoomApiProvider(requestSender, serverLogger); var _mmRoomManager = new MM.Managers.RoomManager(_serverProvider, serverLogger, taskSchedulerFactory, roomApiProvider); var sender = GetSHamanMessageSender(serializer, _mmPacketSender, config, serverLogger); var _mmGroupManager = new MatchMakingGroupManager(serverLogger, taskSchedulerFactory, _playerManager, sender, Mock.Of <IMmMetrics>(), _mmRoomManager, roomPropertiesProvider, config); var matchMaker = new MatchMaker(_playerManager, _mmGroupManager); // // var _measures = new Dictionary<byte, object>(); // _measures.Add(FakePropertyCodes.PlayerProperties.Level, 1); // matchMaker.AddMatchMakingGroup(_measures); matchMaker.AddRequiredProperty(FakePropertyCodes.PlayerProperties.Level); var senderFactory = new ShamanMessageSenderFactory(serializer, config); var protectionManagerConfig = new ConnectionDdosProtectionConfig(ddosConnectionsLevel, ddosConnectionCheckInterval, 5000, 60000); var connectionDdosProtection = new ConnectDdosProtection(protectionManagerConfig, taskSchedulerFactory, serverLogger); var protectionManager = new ProtectionManager(connectionDdosProtection, protectionManagerConfig, serverLogger); //setup mm server return(new MmApplication(serverLogger, config, serializer, socketFactory, matchMaker, requestSender, taskSchedulerFactory, _mmPacketSender, senderFactory, _serverProvider, _mmRoomManager, _mmGroupManager, _playerManager, Mock.Of <IMmMetrics>(), protectionManager)); }