예제 #1
0
        public PendingChallenge GetPendingChallengeByUser(int playerId)
        {
            DbConnection     connection = new DbConnection();
            PendingChallenge pendingChallenge;
            SqlConnection    conn = connection.GetDbConnection();

            conn.Open();
            using (SqlCommand command = new SqlCommand("PendingChallengeByUser", conn)
            {
                CommandType = System.Data.CommandType.StoredProcedure
            })
            {
                SqlDataReader dataReader;
                command.Parameters.Add("@PlayerId", SqlDbType.Int).Value = playerId;
                dataReader = command.ExecuteReader();
                if (dataReader.HasRows)
                {
                    dataReader.Read();
                    pendingChallenge = new PendingChallenge {
                        ChallengeId = (int)dataReader.GetValue(0), ChallengingPlayerId = (int)dataReader.GetValue(1), OpponentPlayerId = (int)dataReader.GetValue(2)
                    };
                }
                else
                {
                    pendingChallenge = new PendingChallenge();
                }
                dataReader.Close();
            }
            conn.Close();
            conn.Dispose();
            return(pendingChallenge);
        }
예제 #2
0
        public byte[] Register(UserEntry entry)
        {
            Console.WriteLine("Got register request from: " + entry.NodeId);

            if (IsInPending(entry))
            {
                Console.WriteLine("Denying access. User with same name/address is pending.");
                return null; // user with same id is already registered, deny
            }

            int challenge = _rand.Next();
            byte[] rawChallenge = Encoding.Default.GetBytes(challenge.ToString());
            PendingChallenge pc = new PendingChallenge(rawChallenge, DateTime.Now);
            waitingChallenge.Add(entry, pc);

            return rawChallenge;
        }