// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddOptions(); services.AddControllers(); services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "Weero", Version = "v1" }); }); #region Database and Blobs initialization services.Configure <StorageAccount>(Configuration.GetSection("StorageAccount")); services.AddScoped <DbConnection>(db => new NpgsqlConnection(Configuration.GetConnectionString("Context"))); #endregion #region Query Builder UserKey userkey = new UserKey(); DiscoKey discokey = new DiscoKey(); MatchKey matchkey = new MatchKey(); Configuration.GetSection("UserKey").Bind(userkey); Configuration.GetSection("DiscoKey").Bind(discokey); Configuration.GetSection("MatchKey").Bind(matchkey); services.AddSingleton <UserKey>(uk => userkey); services.AddSingleton <DiscoKey>(dk => discokey); services.AddSingleton <MatchKey>(mk => matchkey); List <Query> q = new List <Query>(); Configuration.GetSection("Disco").Bind(q); Configuration.GetSection("User").Bind(q); Configuration.GetSection("Match").Bind(q); services.AddSingleton <Builder>(qb => new Builder(q)); #endregion #region BI services.AddScoped <IUserBI, UserBI>(); services.AddScoped <IDiscoBI, DiscoBI>(); services.AddScoped <IMatchBI, MatchBI>(); #endregion #region Repository services.AddScoped <IUserRepository, UserRepository>(); services.AddScoped <IDiscoRespository, DiscoRepository>(); services.AddScoped <IMatchRepository, MatchRepository>(); #endregion }
public MatchRepository(DbConnection context, MatchKey matchkey, Builder builder) { this.context = context; this.matchkey = matchkey; this.builder = builder; }
public void CMakeRoomReq2(GameSession session, RoomMakeReq2Message message) { var plr = session.Player; if (!plr.Channel.RoomManager.GameRuleFactory.Contains((GameRule)message.GameRule)) { Logger.ForAccount(plr) .Error("Game rule {gameRule} does not exist", (GameRule)message.GameRule); session.SendAsync(new ServerResultAckMessage(ServerResult.FailedToRequestTask)); return; } if ((GameRule)message.GameRule != GameRule.Practice && (GameRule)message.GameRule != GameRule.CombatTrainingTD && (GameRule)message.GameRule != GameRule.CombatTrainingDM) { var map = GameServer.Instance.ResourceCache.GetMaps().GetValueOrDefault(message.Map_ID); if (map == null) { Logger.ForAccount(plr) .Error("Map {map} does not exist", message.Map_ID); session.SendAsync(new ServerResultAckMessage(ServerResult.FailedToRequestTask)); return; } if (!map.GameRules.Contains((GameRule)message.GameRule)) { Logger.ForAccount(plr) .Error("Map {mapId}({mapName}) is not available for game rule {gameRule}", map.Id, map.Name, (GameRule)message.GameRule); session.SendAsync(new ServerResultAckMessage(ServerResult.FailedToRequestTask)); return; } } else { message.Player_Limit = 16; } MatchKey matchkey = new MatchKey(); if ((GameRule)message.GameRule == GameRule.CombatTrainingDM || (GameRule)message.GameRule == GameRule.CombatTrainingTD || (GameRule)message.GameRule == GameRule.Practice) { message.FMBURNMode = 1; } bool isfriendly = false; bool isbalanced = true; bool isburning = false; switch (message.FMBURNMode) { case 0: isbalanced = true; isfriendly = false; break; case 1: isbalanced = isfriendly = true; break; case 2: isbalanced = true; isfriendly = false; isburning = true; break; case 3: isburning = true; isbalanced = isfriendly = true; break; } var room = plr.Channel.RoomManager.Create(new RoomCreationOptions { Name = message.rName, GameRule = (GameRule)message.GameRule, PlayerLimit = message.Player_Limit, TimeLimit = TimeSpan.FromMinutes(message.Time), ScoreLimit = (ushort)message.Points, Password = message.rPassword, IsFriendly = isfriendly, IsBalanced = isbalanced, IsBurning = isburning, MapID = message.Map_ID, MinLevel = 0, MaxLevel = 100, ItemLimit = 0, IsNoIntrusion = false, ServerEndPoint = new IPEndPoint(IPAddress.Parse(Config.Instance.IP), Config.Instance.RelayListener.Port), Creator = plr, }, RelayServer.Instance.P2PGroupManager.Create(true)); try { room.Join(plr); } catch (RoomAccessDeniedException) { session.SendAsync(new ServerResultAckMessage(ServerResult.CantEnterRoom)); } catch (RoomLimitReachedException) { session.SendAsync(new ServerResultAckMessage(ServerResult.CantEnterRoom)); } catch (RoomException) { session.SendAsync(new ServerResultAckMessage(ServerResult.ImpossibleToEnterRoom)); } catch (Exception ex) { Logger.Error(ex.ToString()); session.SendAsync(new ServerResultAckMessage(ServerResult.ImpossibleToEnterRoom)); } return; }
protected override int GenerateKey() { return(Name.GetHashCode() ^ MatchKey.GetHashCode()); }