Exemplo n.º 1
0
            private void CancelRequest(string line)
            {
                CancelRequestDetails cRD = JsonConvert.DeserializeObject <CancelRequestDetails>(line);

                new BoggleService().CancelJoinRequest(cRD, out HttpStatusCode status);

                String result = CreateResult(null, status);

                ss.BeginSend(result, (x, y) => { ss.Shutdown(System.Net.Sockets.SocketShutdown.Both); }, null);
            }
Exemplo n.º 2
0
        // TODO: TEST & Add GameState to Game
        public void CancelJoinRequest(CancelRequestDetails cancelRequestDetails, out HttpStatusCode status)
        {
            lock (sync)
            {
                using (SqlConnection connection = new SqlConnection(BoggleDB))
                {
                    connection.Open();

                    // Transaction for databse commands
                    using (SqlTransaction transaction = connection.BeginTransaction())
                    {
                        using (SqlCommand command = new SqlCommand(
                                   "select * from Games where Player1 = @UserID and Player2 is NULL",
                                   connection,
                                   transaction))
                        {
                            command.Parameters.AddWithValue("@UserID", cancelRequestDetails.UserToken);

                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                if (!reader.HasRows)
                                {
                                    // No pending game
                                    status = Forbidden;
                                    reader.Close();
                                    transaction.Commit();
                                    return;
                                }
                            }
                        }

                        using (SqlCommand command = new SqlCommand(
                                   "delete from Games where Player1 = @UserID",
                                   connection,
                                   transaction))
                        {
                            command.Parameters.AddWithValue("@UserID", cancelRequestDetails.UserToken);

                            if (command.ExecuteNonQuery() != 1)
                            {
                                throw new Exception("Query failed unexpectedly");
                            }
                        }

                        status = OK;
                        transaction.Commit();
                    }
                }
            }
        }