示例#1
0
        // 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
        }
示例#2
0
 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;
        }
示例#4
0
 protected override int GenerateKey()
 {
     return(Name.GetHashCode() ^ MatchKey.GetHashCode());
 }