Fixed login and some errors

This commit is contained in:
Subv
2014-07-02 21:56:40 -05:00
parent b516926da8
commit 87b72f41ca
9 changed files with 43 additions and 48 deletions

View File

@@ -1105,7 +1105,7 @@ void WorldSession::ProcessQueryCallbacks()
PreparedQueryResult result;
//! HandleCharEnumOpcode
if (_charEnumCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
if (_charEnumCallback.valid() && _charEnumCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
result = _charEnumCallback.get();
HandleCharEnum(result);
@@ -1118,7 +1118,7 @@ void WorldSession::ProcessQueryCallbacks()
}
//! HandlePlayerLoginOpcode
if (_charLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
if (_charLoginCallback.valid() && _charLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
SQLQueryHolder* param = _charLoginCallback.get();
HandlePlayerLogin((LoginQueryHolder*)param);
@@ -1143,7 +1143,7 @@ void WorldSession::ProcessQueryCallbacks()
}
//- HandleCharAddIgnoreOpcode
if (_addIgnoreCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
if (_addIgnoreCallback.valid() && _addIgnoreCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
result = _addIgnoreCallback.get();
HandleAddIgnoreOpcodeCallBack(result);
@@ -1159,7 +1159,7 @@ void WorldSession::ProcessQueryCallbacks()
}
//- HandleStablePet
if (_stablePetCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
if (_stablePetCallback.valid() && _stablePetCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
result = _stablePetCallback.get();
HandleStablePetCallback(result);

View File

@@ -19,22 +19,20 @@
#include "MySQLConnection.h"
/*! Basic, ad-hoc queries. */
BasicStatementTask::BasicStatementTask(const char* sql) :
m_has_result(false)
{
m_sql = strdup(sql);
}
BasicStatementTask::BasicStatementTask(const char* sql, QueryResultPromise& result) :
m_has_result(true),
m_result(std::move(result))
BasicStatementTask::BasicStatementTask(const char* sql, bool async) :
m_result(nullptr)
{
m_sql = strdup(sql);
m_has_result = async; // If the operation is async, then there's a result
if (async)
m_result = new QueryResultPromise();
}
BasicStatementTask::~BasicStatementTask()
{
free((void*)m_sql);
if (m_has_result && m_result != nullptr)
delete m_result;
}
bool BasicStatementTask::Execute()
@@ -45,11 +43,11 @@ bool BasicStatementTask::Execute()
if (!result || !result->GetRowCount() || !result->NextRow())
{
delete result;
m_result.set_value(QueryResult(NULL));
m_result->set_value(QueryResult(NULL));
return false;
}
m_result.set_value(QueryResult(result));
m_result->set_value(QueryResult(result));
return true;
}

View File

@@ -28,16 +28,16 @@ typedef std::promise<QueryResult> QueryResultPromise;
class BasicStatementTask : public SQLOperation
{
public:
BasicStatementTask(const char* sql);
BasicStatementTask(const char* sql, QueryResultPromise& result);
BasicStatementTask(const char* sql, bool async = false);
~BasicStatementTask();
bool Execute() override;
QueryResultFuture GetFuture() { return m_result->get_future(); }
private:
const char* m_sql; //- Raw query to be executed
bool m_has_result;
QueryResultPromise m_result;
QueryResultPromise* m_result;
};
#endif

View File

@@ -296,10 +296,9 @@ class DatabaseWorkerPool
//! The return value is then processed in ProcessQueryCallback methods.
QueryResultFuture AsyncQuery(const char* sql)
{
QueryResultPromise res;
BasicStatementTask* task = new BasicStatementTask(sql, res);
BasicStatementTask* task = new BasicStatementTask(sql, true);
Enqueue(task);
return res.get_future(); //! Actual return value has no use yet
return task->GetFuture(); //! Actual return value has no use yet
}
//! Enqueues a query in string format -with variable args- that will set the value of the QueryResultFuture return object as soon as the query is executed.
@@ -320,10 +319,9 @@ class DatabaseWorkerPool
//! Statement must be prepared with CONNECTION_ASYNC flag.
PreparedQueryResultFuture AsyncQuery(PreparedStatement* stmt)
{
PreparedQueryResultPromise res;
PreparedStatementTask* task = new PreparedStatementTask(stmt, res);
PreparedStatementTask* task = new PreparedStatementTask(stmt, true);
Enqueue(task);
return res.get_future();
return task->GetFuture();
}
//! Enqueues a vector of SQL operations (can be both adhoc and prepared) that will set the value of the QueryResultHolderFuture
@@ -332,10 +330,9 @@ class DatabaseWorkerPool
//! Any prepared statements added to this holder need to be prepared with the CONNECTION_ASYNC flag.
QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder)
{
QueryResultHolderPromise res;
SQLQueryHolderTask* task = new SQLQueryHolderTask(holder, res);
SQLQueryHolderTask* task = new SQLQueryHolderTask(holder);
Enqueue(task);
return res.get_future(); //! Fool compiler, has no use yet
return task->GetFuture();
}
/**

View File

@@ -445,19 +445,19 @@ std::string MySQLPreparedStatement::getQueryString(std::string const& sqlPattern
}
//- Execution
PreparedStatementTask::PreparedStatementTask(PreparedStatement* stmt) :
m_stmt(stmt),
m_has_result(false) { }
PreparedStatementTask::PreparedStatementTask(PreparedStatement* stmt, PreparedQueryResultPromise& result) :
m_stmt(stmt),
m_has_result(true),
m_result(std::move(result)) { }
PreparedStatementTask::PreparedStatementTask(PreparedStatement* stmt, bool async) :
m_stmt(stmt)
{
m_has_result = async; // If it's async, then there's a result
if (async)
m_result = new PreparedQueryResultPromise();
}
PreparedStatementTask::~PreparedStatementTask()
{
delete m_stmt;
if (m_has_result && m_result != nullptr)
delete m_result;
}
bool PreparedStatementTask::Execute()
@@ -468,10 +468,10 @@ bool PreparedStatementTask::Execute()
if (!result || !result->GetRowCount())
{
delete result;
m_result.set_value(PreparedQueryResult(NULL));
m_result->set_value(PreparedQueryResult(NULL));
return false;
}
m_result.set_value(PreparedQueryResult(result));
m_result->set_value(PreparedQueryResult(result));
return true;
}

View File

@@ -160,15 +160,15 @@ typedef std::promise<PreparedQueryResult> PreparedQueryResultPromise;
class PreparedStatementTask : public SQLOperation
{
public:
PreparedStatementTask(PreparedStatement* stmt);
PreparedStatementTask(PreparedStatement* stmt, PreparedQueryResultPromise& result);
PreparedStatementTask(PreparedStatement* stmt, bool async = false);
~PreparedStatementTask();
bool Execute();
PreparedQueryResultFuture GetFuture() { return m_result->get_future(); }
protected:
PreparedStatement* m_stmt;
bool m_has_result;
PreparedQueryResultPromise m_result;
PreparedQueryResultPromise* m_result;
};
#endif

View File

@@ -45,13 +45,15 @@ typedef std::promise<SQLQueryHolder*> QueryResultHolderPromise;
class SQLQueryHolderTask : public SQLOperation
{
private:
SQLQueryHolder * m_holder;
SQLQueryHolder* m_holder;
QueryResultHolderPromise m_result;
public:
SQLQueryHolderTask(SQLQueryHolder *holder, QueryResultHolderPromise& res)
: m_holder(holder), m_result(std::move(res)){ };
SQLQueryHolderTask(SQLQueryHolder* holder)
: m_holder(holder) { };
bool Execute();
QueryResultHolderFuture GetFuture() { return m_result.get_future(); }
};

View File

@@ -47,7 +47,7 @@ class QueryCallback
int IsReady()
{
return _result.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
return _result.valid() && _result.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
}
void GetResult(Result& res)
@@ -130,7 +130,7 @@ class QueryCallback_2
int IsReady()
{
return _result.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
return _result.valid() && _result.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
}
void GetResult(Result& res)

View File

@@ -46,8 +46,6 @@ public:
private:
int Send(const char* data);
void AsyncRead();
void AsyncWrite(size_t length);
std::string ReadString();
bool CheckAccessLevel(const std::string& user);
bool CheckPassword(const std::string& user, const std::string& pass);