// POST to users => sign up protected override Response PostHandler(Request request) { if (request.Payload.IsNullOrWhiteSpace()) { return(ResponseManager.BadRequest("No payload")); } UserData user = JsonSerializer.Deserialize <UserData>(request.Payload); if (user.Username.IsNullOrWhiteSpace() || user.Password.IsNullOrWhiteSpace()) { return(ResponseManager.BadRequest("Username or Password Empty")); } UsersRepository users = new UsersRepository(); if (users.UserExists(user.Username)) { return(ResponseManager.BadRequest($"Username {user.Username} allready exists")); } if (!users.RegisterUser(user)) { return(ResponseManager.InternalServerError()); } return(ResponseManager.Created($"Account for {user.Username} created successfully")); }
private Response HandleTradeDeal(Request request, string dealId) { var dealer = new TradeDealsRepository(); string username = Session.GetUsername(ExtractAuthorizationToken(request.Authorization)); if (!dealer.DealExists(dealId)) { return(ResponseManager.NotFound($"deal {dealId} does not exist")); } var deal = dealer.GetDeal(dealId); var users = new UsersRepository(); if (deal.OwnerId == users.GetUserID(username)) { return(ResponseManager.BadRequest("you can't trade with yourself")); } if (request.Payload.IsNullOrWhiteSpace()) { return(ResponseManager.BadRequest("no payload")); } string offeredCardId = request.Payload.Replace('\"', ' ').Trim(); var cards = new CardsRepository(); if (!cards.CardExists(offeredCardId)) { return(ResponseManager.BadRequest($"the offered card {offeredCardId} does not exist")); } if (!cards.InStack(username, offeredCardId)) { return(ResponseManager.BadRequest($"user {username} is the not the owner of offered card {offeredCardId}")); } var offeredCard = cards.GetCard(offeredCardId); if (new DecksRepository().HasCardInDeck(username, offeredCardId)) { return(ResponseManager.BadRequest($"card {deal.CardId} is in the deck for {username}. You can't trade cards in the deck")); } if (OfferMeatsDealRequirements(offeredCard, deal)) { cards.TransferOwnership(deal.OwnerId, offeredCardId); cards.TransferOwnership(username, deal.CardId); dealer.RemoveDeal(deal.Id); return(ResponseManager.Created($"trade deal successfully closed.")); } return(ResponseManager.BadRequest($"Deal requirements not met!")); }
// post to battles => requst for a battle protected override Response PostHandler(Request request) { if (request.Authorization.IsNullOrWhiteSpace()) { return(ResponseManager.BadRequest("Authoriazion Header required")); } if (!Authorized(request.Authorization)) { return(ResponseManager.Unauthorized("This action requires authorization")); } string username = Session.GetUsername(ExtractAuthorizationToken(request.Authorization)); Player player = new Player(username); var decksRepo = new DecksRepository(); if (decksRepo.Empty(username)) { return(ResponseManager.BadRequest($"The Deck for user {username} is empty, Configure your deck before entering a battle")); } var deck = decksRepo.GetDeck(username); player.MakeDeck(deck); if (GameHandler.Instance.Enqueued(username)) { return(ResponseManager.BadRequest($"Player {username} is allready enqueued for a battle! You can't fight yourself")); } var resp = ResponseManager.Created(); // https://www.c-sharpcorner.com/UploadFile/1d42da/synchronization-events-and-wait-handles-in-C-Sharp/ // https://docs.microsoft.com/en-us/dotnet/api/system.threading.manualresetevent?view=net-5.0 GameHandler.Instance.BattleEnded += (object sender, BattleEndedEventArgs args) => { resp.AddPayload(args.BattleLog); GameHandler.Instance.ResetEvent.Set(); // send the signal, all waiting threads will start running (open the door) GameHandler.Instance.ResetEvent.Reset(); // reset the flag, new threads can wait (close the door) }; GameHandler.Instance.EnqueuePlayer(player); GameHandler.Instance.ResetEvent.WaitOne(); // block thread untill it gets a signal return(resp); }
private Response CreateTradeDeal(Request request) { TradeDeal deal = JsonSerializer.Deserialize <TradeDeal>(request.Payload); string username = Session.GetUsername(ExtractAuthorizationToken(request.Authorization)); CardsRepository cardsRepo = new CardsRepository(); UsersRepository usersRepo = new UsersRepository(); TradeDealsRepository dealer = new TradeDealsRepository(); DecksRepository decksRepo = new DecksRepository(); if (!deal.Validate()) { return(ResponseManager.BadRequest("invalid format for trade deal json object")); } if (dealer.DealExists(deal.Id)) { return(ResponseManager.BadRequest($"trade deal with id {deal.Id} allready exists")); } if (username.IsNull()) { return(ResponseManager.Unauthorized("No session found")); } if (!cardsRepo.CardExists(deal.CardId)) { return(ResponseManager.NotFound($"card {deal.CardId} doesn't exist")); } if (!cardsRepo.InStack(username, deal.CardId)) { return(ResponseManager.NotFound($"you don't own card {deal.CardId}")); } if (decksRepo.HasCardInDeck(username, deal.CardId)) { return(ResponseManager.BadRequest($"card {deal.CardId} is in the deck for {username}. You can't trade cards in the deck")); } deal.OwnerId = usersRepo.GetUserID(username); dealer.AddDeal(deal); return(ResponseManager.Created($"trade deal {deal.Id} created")); }
// post to transactions/packages => acquire package protected override Response PostHandler(Request request) { if (request.Authorization.IsNullOrWhiteSpace()) { return(ResponseManager.BadRequest("Authoriazion Header required")); } if (!Authorized(request.Authorization)) { return(ResponseManager.Unauthorized()); } string username = Session.GetUsername(ExtractAuthorizationToken(request.Authorization)); string destination = GetNthTokenFromRoute(2, request.Route); switch (destination.ToLower()) { case "packages": AcquirePackage(username); break; } return(ResponseManager.Created($"package for {username} successfully acquired")); }
// post to packages => create package protected override Response PostHandler(Request request) { if (request.Payload.IsNullOrWhiteSpace()) { return(ResponseManager.BadRequest("No Payload")); } if (!Authorized(request.Authorization)) { return(ResponseManager.Unauthorized()); } string username = Session.GetUsername(ExtractAuthorizationToken(request.Authorization)); if (!new UsersRepository().IsAdmin(username)) { return(ResponseManager.Unauthorized("only admins can add new packages")); } CardData[] cardDataArray = JsonSerializer.Deserialize <CardData[]>(request.Payload); new PackagesRepository().AddPackage(cardDataArray); return(ResponseManager.Created("Package added successfully")); }