Пример #1
0
        public void Construct2()
        {
            MessageList         = new Dictionary <int, string>();
            Networkstream       = new Mock <IMyNetWorkStream>();
            Tcpclient           = new Mock <IMyTcpClient>();
            RequestContext      = new Mock <IRequestContext>();
            HTTPresponsewrapper = new Mock <IHTTPResponseWrapper>();
            MessageListMutex    = new Mutex();

            HTTPresponsewrapper.Setup(_ => _.SendDefaultStatus(It.IsAny <IMyNetWorkStream>(), It.IsAny <string>())).Returns(true).Callback((IMyNetWorkStream stream, string y) => { Status = y; });
            HTTPresponsewrapper.Setup(_ => _.SendDefaultMessage(It.IsAny <IMyNetWorkStream>(), It.IsAny <string>(), It.IsAny <string>())).Returns(true).Callback((IMyNetWorkStream stream, string y, string z) => { Status = y; Mesage = z; });

            Tcpclient.Setup(_ => _.GetStream()).Returns(Networkstream.Object);
            Tcpclient.Setup(_ => _.Close());

            RequestContext.Setup(_ => _.Stream).Returns(Networkstream.Object);
            RequestContext.Setup(_ => _.ReponseHandler).Returns(HTTPresponsewrapper.Object);
            Status = "";
            Mesage = "";
            MessageList.Add(0, "test");
            MessageList.Add(1, "abc");

            Messagecounter  = MessageList.Count;
            Storage         = new MessageStorageApi(ref MessageList, ref Messagecounter, ref MessageListMutex);
            EndpointCreator = new RegisterEndPointsAndManageData(ref Storage);
            Server          = new ServerTcpListener();

            EndpointCreator.ChainRegisterEndpoints(ref Server);
        }
Пример #2
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/tradings$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }
                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        JsonTradingOffer Data = JsonConvert.DeserializeObject <JsonTradingOffer>(httpRequest.PayLoad);

                        querystring = $"Select count(*) from UserhasCardsinStack where CardId_fk='{Data.CardToTrade}' and LoginName_fk='{UserID}' and CurrentlyTraded=false";
                        using (NpgsqlCommand verifyOwnedAndNotCurrentlyTraded = new NpgsqlCommand(querystring, conn))
                        {
                            NpgsqlDataReader readerverifyOwnedAndNotCurrentlyTraded = verifyOwnedAndNotCurrentlyTraded.ExecuteReader();
                            reader.Read();
                            if (Int32.Parse(reader[0].ToString()) != 1)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                                return(400);
                            }
                            reader.Close();
                        }
                        querystring = $"Update UserhasCardsinStack set CurrentlyTraded=true where CardId_fk='{Data.CardToTrade}' and LoginName_fk='{UserID}' and CurrentlyTraded=false";
                        using (NpgsqlCommand UpdateCardTradeStatus = new NpgsqlCommand(querystring, conn))
                        {
                            UpdateCardTradeStatus.ExecuteNonQuery();
                        }
                        querystring = @$ "Insert into Trading values ('{Data.Id}','{Data.CardToTrade}','{UserID}','{Data.Type}','{Data.MinimumDamage}', now())";
                        using (NpgsqlCommand ListOffer = new NpgsqlCommand(querystring, conn))
                        {
                            ListOffer.ExecuteNonQuery();
                        }
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "201");
                        conn.Close();
                        return(201);
                    }
                }
Пример #3
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("GET", "^/score$", (IRequestContext httpRequest) =>
            {
                try
                {
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    string querystringUnionAllCards = @$ "select win,tie,lose,elo,LoginName from Scoreboard join users on scoreboard.LoginName_fk = users.LoginName order by elo desc,win desc,tie desc,lose asc";
                    using (NpgsqlCommand getScorebaord = new NpgsqlCommand(querystringUnionAllCards, conn))
                    {
                        NpgsqlDataReader readergetScorebaord = getScorebaord.ExecuteReader();
                        List <JsonScore> Scoreboard          = new List <JsonScore>();

                        while (readergetScorebaord.Read())
                        {
                            var Score       = new JsonScore();
                            Score.Win       = readergetScorebaord[0].ToString();
                            Score.Tie       = readergetScorebaord[1].ToString();
                            Score.Lose      = readergetScorebaord[2].ToString();
                            Score.Elo       = readergetScorebaord[3].ToString();
                            Score.LoginName = readergetScorebaord[4].ToString();
                            if ((Int32.Parse(Score.Lose) == 0 && Int32.Parse(Score.Tie) == 0))
                            {
                                if (Int32.Parse(Score.Win) > 0)
                                {
                                    Score.WLTratio = 1;
                                }
                                else
                                {
                                    Score.WLTratio = 0;
                                }
                            }
                            else
                            {
                                Score.WLTratio = (Int32.Parse(Score.Win) / (Int32.Parse(Score.Lose) + Int32.Parse(Score.Tie)));
                            }
                            Scoreboard.Add(Score);
                        }

                        httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", JsonConvert.SerializeObject(Scoreboard, Formatting.Indented));
                        conn.Close();
                        return(200);
                    }
                }
                catch
                {
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                    return(400);
                }
            });
        }
Пример #4
0
 public static void RegisterRoute(ServerTcpListener server)
 {
     server.EndPointApi.RegisterEndPoint("GET", "^/help$", (IRequestContext httpRequest) =>
     {
         try
         {
             httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", File.ReadAllText("helpFileJson.txt"));
             return(200);
         }
         catch
         {
             httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
             return(400);
         }
     });
 }
Пример #5
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("GET", "^/deck$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }

                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        string querystringUnionAllCards = @$ "select CardId,CardName,BaseDamage from Card join UserhasCardsinDeck on Card.CardID = UserhasCardsinDeck.CardId_fk where LoginName_fk = '{UserID}'";
                        using (NpgsqlCommand getdeck = new NpgsqlCommand(querystringUnionAllCards, conn))
                        {
                            NpgsqlDataReader readerGetDeck   = getdeck.ExecuteReader();
                            List <(string, string)> cardList = new List <(string, string)>();
                            while (readerGetDeck.Read())
                            {
                                (string, string)t = (readerGetDeck[0].ToString(), readerGetDeck[1].ToString());
                                cardList.Add(t);
                            }
                            httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", JsonConvert.SerializeObject(cardList, Formatting.Indented));
                            conn.Close();
                            return(200);
                        }
                    }
                }
Пример #6
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("GET", "^/cards$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }

                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string userId = reader[0].ToString();
                        reader.Close();
                        string querystringUnionAllCards = @$ "select 'deck' as location,cardId_fk from UserhasCardsinDeck where LoginName_fk='{userId}' union select 'stack' as location,cardId_fk from UserhasCardsinStack where LoginName_fk='{userId}' and (select count(*) from UserhasCardsinDeck where UserhasCardsinDeck.cardID_fk = UserhasCardsinStack.cardID_fk) = 0";
                        using (NpgsqlCommand commandUnionSelect = new NpgsqlCommand(querystringUnionAllCards, conn))
                        {
                            NpgsqlDataReader readercommandUnionSelect = commandUnionSelect.ExecuteReader();
                            List <(string, string)> CardList          = new List <(string, string)>();
                            while (readercommandUnionSelect.Read())
                            {
                                (string, string)t = (readercommandUnionSelect[0].ToString(), readercommandUnionSelect[1].ToString());
                                CardList.Add(t);
                            }
                            httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", JsonConvert.SerializeObject(CardList, Formatting.Indented));
                            conn.Close();
                            return(200);
                        }
                    }
                }
Пример #7
0
 public static void RegisterRoute(ServerTcpListener server)
 {
     server.EndPointApi.RegisterEndPoint("GET", "^/tradings$", (IRequestContext httpRequest) =>
     {
         try
         {
             NpgsqlConnection conn = DbHelper.ConnectObj();
             conn.Open();
             using (NpgsqlCommand GetAllTrades = new NpgsqlCommand($"Select TradeID,CardToTradeID_fk,OriginalOwner_fk,typeToTrade,minDamage,TimestampOffer from Trading order by TimestampOffer", conn))
             {
                 List <JsonTradingHelper> TradeList  = new List <JsonTradingHelper>();
                 NpgsqlDataReader readerGetAllTrades = GetAllTrades.ExecuteReader();
                 if (readerGetAllTrades.HasRows)
                 {
                     while (readerGetAllTrades.Read())
                     {
                         JsonTradingHelper item = new JsonTradingHelper();
                         item.TradeID           = readerGetAllTrades[0].ToString();
                         item.CardToTradeID_fk  = readerGetAllTrades[1].ToString();
                         item.OriginalOwner_fk  = readerGetAllTrades[2].ToString();
                         item.typeToTrade       = readerGetAllTrades[3].ToString();
                         item.minDamage         = readerGetAllTrades[4].ToString();
                         item.TimestampOffer    = readerGetAllTrades[5].ToString();
                         TradeList.Add(item);
                     }
                     httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", JsonConvert.SerializeObject(TradeList));
                     conn.Close();
                     return(200);
                 }
                 else
                 {
                     httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", " \"No trades currently\" ");
                     conn.Close();
                     return(200);
                 }
             }
         }
         catch
         {
             httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
             return(400);
         }
     });
 }
Пример #8
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/sessions$", (IRequestContext httpRequest) =>
            {
                try
                {
                    JsonSessions JsonData = JsonConvert.DeserializeObject <JsonSessions>(httpRequest.PayLoad);
                    string querystring    = @$ "select count(*) as count from users where LoginName='{JsonData.Username}' and Passwort='{JsonData.Password}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();
                    bool trylogin = false;

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        while (reader.Read())
                        {
                            int count = Int32.Parse(reader["count"].ToString());
                            if (count == 1)
                            {
                                trylogin = true;
                            }
                        }
                        if (trylogin)
                        {
                            httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", $"{{\"Authorization\": \"Basic {JsonData.Username}-mtcgToken\"}}");
                            conn.Close();
                            return(200);
                        }
                        else
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "404");
                            conn.Close();
                            return(404);
                        }
                    }
                }
                catch
                {
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                    return(400);
                }
            });
        }
Пример #9
0
        static void Main(string[] args)
        {
            Dictionary <int, string> messageList = new Dictionary <int, string>();
            int   messageCounter   = 1;
            Mutex messageListMutex = new Mutex();

            messageList.Add(messageCounter, "Hallo");
            messageCounter++;
            messageList.Add(messageCounter, "Test");
            messageCounter++;

            MessageStorageApi storage = new MessageStorageApi(ref messageList, ref messageCounter, ref messageListMutex);
            RegisterEndPointsAndManageData endPointRegisterController = new RegisterEndPointsAndManageData(ref storage);
            ServerTcpListener server = new ServerTcpListener();

            endPointRegisterController.ChainRegisterEndpoints(ref server);

            server.ListenForConnections();
        }
Пример #10
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/users$", (IRequestContext httpRequest) =>
            {
                try
                {
                    JsonRegisterUser Data = JsonConvert.DeserializeObject <JsonRegisterUser>(httpRequest.PayLoad);

                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();
                    string querystring = $"Insert into users (LoginName,Passwort) values('{Data.Username}','{Data.Password}') ";
                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        try
                        {
                            command.ExecuteNonQuery();
                        }
                        catch
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "409");
                            conn.Close();
                            return(409);
                        }

                        querystring = $"Insert into Scoreboard (LoginName_fk) values('{Data.Username}')";
                        using (NpgsqlCommand command2 = new NpgsqlCommand(querystring, conn))
                        {
                            command2.ExecuteNonQuery();
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "201");
                            conn.Close();
                            return(201);
                        }
                    }
                }
                catch
                {
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                    return(400);
                }
            });
        }
Пример #11
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/packages$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "Basic admin-mtcgToken"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                        return(401);
                    }

                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand PackageInsert = new NpgsqlCommand(@$ "Insert into Packages(StringCards) values('{httpRequest.PayLoad}');", conn))
                    {
                        try
                        {
                            PackageInsert.ExecuteNonQuery();
                        }
                        catch
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "500");
                            return(500);
                        }
                    }

                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "201");
                    return(201);
                }
                catch
                {
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                    return(400);
                }
            });
        }
Пример #12
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("DELETE", "^/tradings/.+$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }
                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();
                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        string DeleteId = Regex.Match(httpRequest.MessageEndPoint, "^/tradings/(.*)$").Groups[1].Value;

                        string CardID;
                        querystring = $"Select cardtotradeid_fk from Trading where tradeid='{DeleteId}' and originalowner_fk='{UserID}'";
                        using (NpgsqlCommand DeleteTrading = new NpgsqlCommand(querystring, conn))
                        {
                            NpgsqlDataReader readerSelect = DeleteTrading.ExecuteReader();
                            if (readerSelect.HasRows == false)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                                conn.Close();
                                return(400);
                            }
                            readerSelect.Read();
                            CardID = readerSelect[0].ToString();
                            readerSelect.Close();
                        }
                        querystring = @$ "Delete from Trading where tradeID='{DeleteId}' and OriginalOwner_fk='{UserID}'";

                        using (NpgsqlCommand DeleteTrading = new NpgsqlCommand(querystring, conn))
                        {
                            DeleteTrading.ExecuteNonQuery();
                            querystring = $"update UserhasCardsinStack set CurrentlyTraded=false where CardId_fk='{CardID}' and LoginName_fk='{UserID}'";
                            Console.WriteLine(querystring);
                            using (NpgsqlCommand UpdateCardStatus = new NpgsqlCommand(querystring, conn))
                            {
                                UpdateCardStatus.ExecuteNonQuery();
                            }
                        }
                    }
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "200");
                    return(200);
                }
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/transactions/packages$", (IRequestContext httpRequest) =>
            {
                try
                {
                    string userID;
                    string Coins;
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }
                    string querystring    = @$ "select LoginName,Coins from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();
                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            Console.WriteLine("illegal FieldCount " + reader.FieldCount);
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }

                        reader.Read();
                        userID = reader[0].ToString();
                        Coins  = reader[1].ToString();
                        reader.Close();

                        if (Int32.Parse(Coins) < 5)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                            conn.Close();
                            return(400);
                        }
                        using (NpgsqlCommand command2 = new NpgsqlCommand("Select PackageId,StringCards from Packages order by PackageID asc limit 1", conn))
                        {
                            NpgsqlDataReader readerPackageString = command2.ExecuteReader();
                            if (readerPackageString.HasRows == false)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "404");
                                conn.Close();
                                return(404);
                            }
                            readerPackageString.Read();
                            string PackageID   = readerPackageString[0].ToString();
                            string stringCards = readerPackageString[1].ToString();
                            readerPackageString.Close();
                            using (var commandDelete = new NpgsqlCommand($"Delete from Packages where PackageId='{PackageID}'", conn)) { commandDelete.ExecuteNonQuery(); };
                            using (var commandDelete = new NpgsqlCommand($"Update users set coins='{(Int32.Parse(Coins.ToString()) - 5).ToString()}' where LoginName='{userID}'", conn)) { commandDelete.ExecuteNonQuery(); };


                            var CardList = Cards.CardHelpers.PackageArrayToListCards(stringCards);
                            foreach (var item in CardList)
                            {
                                string cardelement;
                                if (item.CardElement == Card.CardelEmentEnum.fire)
                                {
                                    cardelement = "Fire";
                                }
                                else if (item.CardElement == Card.CardelEmentEnum.water)
                                {
                                    cardelement = "Water";
                                }
                                else
                                {
                                    cardelement = "Normal";
                                }
                                using (var commandInsertCard = new NpgsqlCommand($"insert into Card(CardID,Cardtype,CardName,BaseDamage,CardElement,CardStyle) values('{item.CardId}','{item.CardType}','{item.CardName}','{item.BaseDamage.ToString()}','{cardelement}','{item.CardStyle}')", conn)) { commandInsertCard.ExecuteNonQuery(); };
                                using (var commandInsertStack = new NpgsqlCommand($"insert into UserhasCardsinStack(CardId_fk,LoginName_Fk) values('{item.CardId}','{userID}')", conn)) { commandInsertStack.ExecuteNonQuery(); };
                            }
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "200");
                            conn.Close();
                            return(200);
                        }
                    }
                }
Пример #14
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("PUT", "^/deck$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }

                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        List <string> TryToAddToDeck = JsonConvert.DeserializeObject <List <string> >(httpRequest.PayLoad);
                        if (TryToAddToDeck.Count != 4)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                            conn.Close();
                            return(400);
                        }

                        //ownership test
                        try
                        {
                            foreach (var item in TryToAddToDeck)
                            {
                                string CountVerfiyOwned = $"select count(*) from UserhasCardsinStack where loginName_fk='{UserID}' and CardId_Fk='{item}' and CurrentlyTraded=false";
                                Console.WriteLine("trying: " + CountVerfiyOwned);
                                using (NpgsqlCommand VerifyOwned = new NpgsqlCommand(CountVerfiyOwned, conn))
                                {
                                    NpgsqlDataReader readerVerifyOwned = VerifyOwned.ExecuteReader();
                                    if (readerVerifyOwned.HasRows == false)
                                    {
                                        throw new ArgumentException("internal error");
                                    }
                                    readerVerifyOwned.Read();
                                    if (Int32.Parse(readerVerifyOwned[0].ToString()) != 1)
                                    {
                                        throw new ArgumentException("not owned by this person: " + item);
                                    }
                                    readerVerifyOwned.Close();
                                }
                            }
                        }
                        catch
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                            conn.Close();
                            return(400);
                        }

                        using (NpgsqlCommand DeleteOldDeck = new NpgsqlCommand($"delete from UserhasCardsinDeck where CardId_fk='{UserID}'", conn))
                        {
                            DeleteOldDeck.ExecuteNonQuery();
                        }

                        foreach (var item in TryToAddToDeck)
                        {
                            string CountVerfiyOwned = $"Insert into UserhasCardsinDeck values('{item}','{UserID}')";
                            using (NpgsqlCommand InsertNewDeck = new NpgsqlCommand(CountVerfiyOwned, conn))
                            {
                                InsertNewDeck.ExecuteNonQuery();
                            }
                        }
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "200");
                        conn.Close();
                        return(200);
                    }
                }
Пример #15
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/battles$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }
                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    string UserID;
                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        UserID = reader[0].ToString();
                        reader.Close();
                    }
                    Player player = new Player();
                    querystring   = @$ "select loginname,Elo from users join Scoreboard on users.LoginName = Scoreboard.LoginName_fk where loginname='{UserID}'";
                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "500");
                            conn.Close();
                            return(500);
                        }
                        reader.Read();
                        player.Elo      = reader[1].ToString();
                        player.UserName = reader[0].ToString();
                        reader.Close();
                    }
                    querystring      = @$ "select CardID,Cardtype,CardName,BaseDamage,CardElement,CardStyle from Card join UserhasCardsinDeck on Card.CardID = UserhasCardsinDeck.CardId_fk where LoginName_fk='{UserID}'";
                    List <Card> Deck = new List <Card>();
                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                            conn.Close();
                            return(400);
                        }
                        while (reader.Read())
                        {
                            Card.CardelEmentEnum Type;
                            if (reader[4].ToString() == "fire")
                            {
                                Type = Card.CardelEmentEnum.fire;
                            }
                            else if (reader[4].ToString() == "water")
                            {
                                Type = Card.CardelEmentEnum.water;
                            }
                            else
                            {
                                Type = Card.CardelEmentEnum.normal;
                            }
                            string whatcard;
                            if (reader[5].ToString() == "Spell")
                            {
                                whatcard = "Spell";
                            }
                            else
                            {
                                whatcard = reader[1].ToString();
                            }

                            Deck.Add(CardHelpers.Cardmaker(Int32.Parse(reader[3].ToString()), reader[2].ToString(), reader[0].ToString(), Type, whatcard));
                        }
                    }
                    if (Deck.Count != 4)
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        conn.Close();
                        return(400);
                    }
                    player.Deck            = Deck;
                    AutoResetEvent myEvent = new AutoResetEvent(false);
                    Programm.fightApi.QueUpForFight(player, myEvent);
                    myEvent.WaitOne();

                    switch (player.Status)
                    {
                    case FightHandler.BattleStatus.Win:
                        DbHelper.IncreaseWin(UserID);
                        httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", player.AssignedBattleLog);
                        conn.Close();
                        return(200);

                    case FightHandler.BattleStatus.Lose:
                        DbHelper.IncreaseLose(UserID);
                        httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", player.AssignedBattleLog);
                        conn.Close();
                        return(200);

                    case FightHandler.BattleStatus.Tie:
                        DbHelper.IncreaseTie(UserID);
                        httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", player.AssignedBattleLog);
                        conn.Close();
                        return(200);

                    default:
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "500");
                        conn.Close();
                        return(500);
                    }
                }
Пример #16
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("GET", "^/stats$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }

                    string querystring    = @$ "select LoginName from users where LoginName='{Regex.Match(token, " ^ Basic(.*) - mtcgToken$ ").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        string querystringUnionAllCards = @$ "select win,tie,lose,elo from Scoreboard where LoginName_fk = '{UserID}'";
                        using (NpgsqlCommand getStats = new NpgsqlCommand(querystringUnionAllCards, conn))
                        {
                            NpgsqlDataReader readergetStats = getStats.ExecuteReader();
                            if (readergetStats.HasRows == false)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "404");
                                return(404);
                            }
                            readergetStats.Read();
                            var Score       = new JsonScore();
                            Score.Win       = readergetStats[0].ToString();
                            Score.Tie       = readergetStats[1].ToString();
                            Score.Lose      = readergetStats[2].ToString();
                            Score.Elo       = readergetStats[3].ToString();
                            Score.LoginName = UserID;
                            if ((Int32.Parse(Score.Lose) == 0 && Int32.Parse(Score.Tie) == 0))
                            {
                                if (Int32.Parse(Score.Win) > 0)
                                {
                                    Score.WLTratio = 1;
                                }
                                else
                                {
                                    Score.WLTratio = 0;
                                }
                            }
                            else
                            {
                                Score.WLTratio = (Int32.Parse(Score.Win) / (Int32.Parse(Score.Lose) + Int32.Parse(Score.Tie)));
                            }



                            httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", JsonConvert.SerializeObject(Score, Formatting.Indented));
                            conn.Close();
                            return(200);
                        }
                    }
                }
Пример #17
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("POST", "^/tradings/.+$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return 400;
                    }
                    string querystring = @$"select LoginName from users where LoginName='{Regex.Match(token, "^Basic (.*)-mtcgToken$").Groups[1].Value}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return 401;
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        string CardIdEndPoint = Regex.Match(httpRequest.MessageEndPoint, "^/tradings/(.*)$").Groups[1].Value;
                        querystring = $"select TradeId,CardToTradeID_fk,OriginalOwner_fk,typeToTrade,minDamage from Trading  where TradeID='{CardIdEndPoint}'";
                        using (NpgsqlCommand GetTradeData = new NpgsqlCommand(querystring, conn))
                        {
                            NpgsqlDataReader readerGetTradeData = GetTradeData.ExecuteReader();
                            if (readerGetTradeData.HasRows == false)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                                conn.Close();
                                return 400;
                            }
                            readerGetTradeData.Read();
                            if (readerGetTradeData[2].ToString() == UserID)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                                conn.Close();
                                return 400;
                            }

                            string TradeId = readerGetTradeData[0].ToString();
                            string CardToTradeID_fk = readerGetTradeData[1].ToString();
                            string OriginalOwner_fk = readerGetTradeData[2].ToString();
                            string typeToTrade = readerGetTradeData[3].ToString();
                            string minDamage = readerGetTradeData[4].ToString();
                            readerGetTradeData.Close();

                            querystring = $"Select CardStyle,BaseDamage from Card join UserhasCardsinStack on Card.CardID = CardId_fk where CardID='{httpRequest.PayLoad.Trim('\"')}' and LoginName_fk ='{UserID}' and CurrentlyTraded  = false; ";
                            using (NpgsqlCommand SelectCardForTrade = new NpgsqlCommand(querystring, conn))
                            {
                                NpgsqlDataReader readerSelectCardForTrade = SelectCardForTrade.ExecuteReader();
                                if (readerSelectCardForTrade.HasRows == false)
                                {
                                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                                    conn.Close();
                                    return 400;
                                }
                                readerSelectCardForTrade.Read();

                                if (readerSelectCardForTrade[0].ToString().ToUpper() != typeToTrade.ToUpper())
                                {
                                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "500");
                                    conn.Close();
                                    return 500;
                                }
                                if (Int32.Parse(readerSelectCardForTrade[1].ToString()) <= Int32.Parse(minDamage))
                                {
                                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "500");
                                    conn.Close();
                                    return 500;
                                }
                                readerSelectCardForTrade.Close();

                                querystring = $"Select count(*) from UserhasCardsinDeck where LoginName_fk='{UserID}' and cardid_fk = '{httpRequest.PayLoad.Trim('\"')}'; ";
                                using (NpgsqlCommand VerifynotInDeckCurrently = new NpgsqlCommand(querystring, conn))
                                {
                                    NpgsqlDataReader readerVerifynotInDeckCurrently = VerifynotInDeckCurrently.ExecuteReader();
                                    readerVerifynotInDeckCurrently.Read();
                                    if (Int32.Parse(readerVerifynotInDeckCurrently[0].ToString()) > 0)
                                    {
                                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                                        conn.Close();
                                        return 400;
                                    }
                                    readerVerifynotInDeckCurrently.Close();
                                }

                                querystring = @$"Update UserhasCardsinStack set LoginName_fk='{UserID}', CurrentlyTraded = false where CardId_fk='{CardToTradeID_fk}'";
                                using (NpgsqlCommand TradeCommand = new NpgsqlCommand(querystring, conn))
                                {
                                    TradeCommand.ExecuteNonQuery();
                                }
                                querystring = @$"Update UserhasCardsinStack set LoginName_fk='{OriginalOwner_fk}', CurrentlyTraded = false where CardId_fk='{httpRequest.PayLoad.Trim('\"')}'";
                                using (NpgsqlCommand TradeCommand = new NpgsqlCommand(querystring, conn))
                                {
                                    TradeCommand.ExecuteNonQuery();
                                }
                                querystring = @$"Delete from Trading where TradeID='{CardIdEndPoint}'";
                                using (NpgsqlCommand TradeCommand = new NpgsqlCommand(querystring, conn))
                                {
                                    TradeCommand.ExecuteNonQuery();
                                }

                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "200");
                                conn.Close();
                                return 200;

                            }
                        }
                    }
                }
Пример #18
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("GET", "^/users/.+$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }
                    string userToken = Regex.Match(token, "^Basic (.*)-mtcgToken$").Groups[1].Value;
                    if (!Regex.IsMatch(httpRequest.MessageEndPoint, $"^/users/{userToken}$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                        return(401);
                    }


                    string querystring    = @$ "select LoginName from users where LoginName='{userToken}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "401");
                            conn.Close();
                            return(401);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        string query = $"Select loginname,username,bio,image,coins from users where LoginName='{UserID}'";
                        using (NpgsqlCommand GetUserdate = new NpgsqlCommand(query, conn))
                        {
                            NpgsqlDataReader readerGetUserdate = GetUserdate.ExecuteReader();
                            if (readerGetUserdate.HasRows == false)
                            {
                                httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "404");
                                conn.Close();
                                return(404);
                            }
                            readerGetUserdate.Read();
                            JsonProfileDataExtended data = new JsonProfileDataExtended();
                            data.LoginName = readerGetUserdate[0].ToString();
                            data.Name      = readerGetUserdate[1].ToString();
                            data.Bio       = readerGetUserdate[2].ToString();
                            data.Image     = readerGetUserdate[3].ToString();
                            data.Coins     = readerGetUserdate[4].ToString();

                            httpRequest.ReponseHandler.SendDefaultMessage(httpRequest.Stream, "200", JsonConvert.SerializeObject(data));
                            conn.Close();
                            return(200);
                        }
                    }
                }
                catch
                {
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                    return(400);
                }
            });
        }
Пример #19
0
        public static void RegisterRoute(ServerTcpListener server)
        {
            server.EndPointApi.RegisterEndPoint("PUT", "^/users/.+$", (IRequestContext httpRequest) =>
            {
                try
                {
                    httpRequest.Headers.TryGetValue("Authorization", out string token);
                    if (!Regex.IsMatch(token, "^Basic (.*)-mtcgToken$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                        return(400);
                    }
                    string userToken = Regex.Match(token, "^Basic (.*)-mtcgToken$").Groups[1].Value;
                    if (!Regex.IsMatch(httpRequest.MessageEndPoint, $"^/users/{userToken}$"))
                    {
                        httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "404");
                        return(404);
                    }


                    string querystring    = @$ "select LoginName from users where LoginName='{userToken}'";
                    NpgsqlConnection conn = DbHelper.ConnectObj();
                    conn.Open();

                    using (NpgsqlCommand command = new NpgsqlCommand(querystring, conn))
                    {
                        NpgsqlDataReader reader = command.ExecuteReader();
                        if (reader.HasRows == false)
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "404");
                            conn.Close();
                            return(404);
                        }
                        reader.Read();
                        string UserID = reader[0].ToString();
                        reader.Close();

                        var UpdateData = JsonConvert.DeserializeObject <JsonProfileData>(httpRequest.PayLoad);
                        string query;
                        try
                        {
                            query = DbHelper.querybuilder(UpdateData, UserID);
                        }
                        catch
                        {
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                            conn.Close();
                            return(400);
                        }

                        using (NpgsqlCommand UpdateProfileData = new NpgsqlCommand(query, conn))
                        {
                            Console.WriteLine(query);
                            UpdateProfileData.ExecuteNonQuery();
                            httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "200");
                            conn.Close();
                            return(200);
                        }
                    }
                }
                catch
                {
                    httpRequest.ReponseHandler.SendDefaultStatus(httpRequest.Stream, "400");
                    return(400);
                }
            });
        }