fixing illegal squids
This commit is contained in:
parent
c5c1441287
commit
88ade7b66b
5 changed files with 73 additions and 41 deletions
|
@ -3,7 +3,19 @@
|
||||||
|
|
||||||
namespace sosc {
|
namespace sosc {
|
||||||
namespace ctx {
|
namespace ctx {
|
||||||
|
class MasterClientContext {
|
||||||
|
public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class MasterIntraContext {
|
||||||
|
public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
|
|
||||||
#include "../db/database.hpp"
|
#include "../db/database.hpp"
|
||||||
|
|
||||||
|
#include "../ctx/master.hpp"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace sosc {
|
namespace sosc {
|
||||||
|
@ -24,10 +26,14 @@ private:
|
||||||
cgc::Cipher cipher;
|
cgc::Cipher cipher;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MasterClientPool : public Pool<MasterClient> {
|
class MasterClientPool : public Pool<MasterClient, ctx::MasterClientContext> {
|
||||||
protected:
|
protected:
|
||||||
void SetupQueries(Queries* queries) override;
|
void SetupQueries(Queries* queries) override;
|
||||||
bool ProcessClient(MasterClient& client, const Queries* queries) override {
|
bool ProcessClient(
|
||||||
|
MasterClient& client,
|
||||||
|
ctx::MasterClientContext* context,
|
||||||
|
const Queries* queries) override
|
||||||
|
{
|
||||||
// TODO implement
|
// TODO implement
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -79,10 +85,14 @@ private:
|
||||||
const Pool::Queries* queries;
|
const Pool::Queries* queries;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MasterIntraPool : public Pool<MasterIntra> {
|
class MasterIntraPool : public Pool<MasterIntra, ctx::MasterIntraContext> {
|
||||||
protected:
|
protected:
|
||||||
void SetupQueries(Queries* queries) override;
|
void SetupQueries(Queries* queries) override;
|
||||||
bool ProcessClient(MasterIntra& client, const Queries* queries) override {
|
bool ProcessClient
|
||||||
|
(MasterIntra& client,
|
||||||
|
ctx::MasterIntraContext* context,
|
||||||
|
const Queries* queries) override
|
||||||
|
{
|
||||||
return client.Process(queries);
|
return client.Process(queries);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "../sock/scapesock.hpp"
|
#include "../sock/scapesock.hpp"
|
||||||
#include "../sock/pool.hpp"
|
#include "../sock/pool.hpp"
|
||||||
|
#include "../ctx/slave.hpp"
|
||||||
|
|
||||||
namespace sosc {
|
namespace sosc {
|
||||||
/** SLAVE -> CLIENT **/
|
/** SLAVE -> CLIENT **/
|
||||||
|
@ -14,9 +15,13 @@ private:
|
||||||
ScapeConnection sock;
|
ScapeConnection sock;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SlaveClientPool : public Pool<SlaveClient> {
|
class SlaveClientPool : public Pool<SlaveClient, ctx::SlaveContext> {
|
||||||
protected:
|
protected:
|
||||||
bool ProcessClient(SlaveClient& client, const Queries* queries) override {
|
bool ProcessClient
|
||||||
|
(SlaveClient& client,
|
||||||
|
ctx::SlaveContext* context,
|
||||||
|
const Queries* queries) override
|
||||||
|
{
|
||||||
// TODO implement
|
// TODO implement
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ typedef struct {
|
||||||
int tolerance = -1;
|
int tolerance = -1;
|
||||||
} poolinfo_t;
|
} poolinfo_t;
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
class Pool {
|
class Pool {
|
||||||
public:
|
public:
|
||||||
Pool();
|
Pool();
|
||||||
|
@ -46,14 +46,15 @@ public:
|
||||||
typedef std::vector<db::Query*> Queries;
|
typedef std::vector<db::Query*> Queries;
|
||||||
protected:
|
protected:
|
||||||
virtual void SetupQueries(Queries* queries) {};
|
virtual void SetupQueries(Queries* queries) {};
|
||||||
virtual bool ProcessClient(T& client, const Queries* queries) = 0;
|
virtual bool ProcessClient
|
||||||
|
(T& client, U* context, const Queries* queries) = 0;
|
||||||
private:
|
private:
|
||||||
bool IsStackFull(int stackCount) const;
|
bool IsStackFull(int stackCount) const;
|
||||||
bool CanAddStack() const;
|
bool CanAddStack() const;
|
||||||
|
|
||||||
class Stack {
|
class Stack {
|
||||||
public:
|
public:
|
||||||
explicit Stack(Pool<T>* pool);
|
explicit Stack(Pool<T,U>* pool);
|
||||||
Stack(const Stack&) = delete;
|
Stack(const Stack&) = delete;
|
||||||
|
|
||||||
void Start();
|
void Start();
|
||||||
|
@ -70,7 +71,7 @@ private:
|
||||||
|
|
||||||
Queries queries;
|
Queries queries;
|
||||||
std::thread* thread;
|
std::thread* thread;
|
||||||
Pool<T>* pool;
|
Pool<T,U>* pool;
|
||||||
bool is_open;
|
bool is_open;
|
||||||
bool is_running;
|
bool is_running;
|
||||||
|
|
||||||
|
@ -81,25 +82,26 @@ private:
|
||||||
poolinfo_t info;
|
poolinfo_t info;
|
||||||
bool is_open;
|
bool is_open;
|
||||||
|
|
||||||
|
U context;
|
||||||
Queries queries;
|
Queries queries;
|
||||||
std::vector<Stack*> stacks;
|
std::vector<Stack*> stacks;
|
||||||
|
|
||||||
friend class Stack;
|
friend class Stack;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
Pool<T>::Pool() {
|
Pool<T,U>::Pool() {
|
||||||
this->info = poolinfo_t();
|
this->info = poolinfo_t();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Configure(const poolinfo_t& info) {
|
void Pool<T,U>::Configure(const poolinfo_t& info) {
|
||||||
this->info = info;
|
this->info = info;
|
||||||
this->is_open = false;
|
this->is_open = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Start() {
|
void Pool<T,U>::Start() {
|
||||||
if(this->is_open)
|
if(this->is_open)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -113,8 +115,8 @@ void Pool<T>::Start() {
|
||||||
this->is_open = true;
|
this->is_open = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
bool Pool<T>::IsStackFull(int stackCount) const {
|
bool Pool<T,U>::IsStackFull(int stackCount) const {
|
||||||
const poolinfo_t *info = &this->info;
|
const poolinfo_t *info = &this->info;
|
||||||
return info->max_size != -1
|
return info->max_size != -1
|
||||||
&& stackCount <
|
&& stackCount <
|
||||||
|
@ -124,14 +126,14 @@ bool Pool<T>::IsStackFull(int stackCount) const {
|
||||||
&& stackCount < info->max_size;
|
&& stackCount < info->max_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
bool Pool<T>::CanAddStack() const {
|
bool Pool<T,U>::CanAddStack() const {
|
||||||
return this->info.max_count == -1
|
return this->info.max_count == -1
|
||||||
|| this->stacks.size() < this->info.max_count;
|
|| this->stacks.size() < this->info.max_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
bool Pool<T>::AddClient(T client) {
|
bool Pool<T,U>::AddClient(T client) {
|
||||||
if(!this->is_open)
|
if(!this->is_open)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -160,8 +162,8 @@ bool Pool<T>::AddClient(T client) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
int Pool<T>::ClientCount() {
|
int Pool<T,U>::ClientCount() {
|
||||||
if(!this->is_open)
|
if(!this->is_open)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -171,8 +173,8 @@ int Pool<T>::ClientCount() {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Stop() {
|
void Pool<T,U>::Stop() {
|
||||||
if(!this->is_open)
|
if(!this->is_open)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -190,15 +192,15 @@ void Pool<T>::Stop() {
|
||||||
this->is_open = false;
|
this->is_open = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
Pool<T>::Stack::Stack(Pool<T>* pool) {
|
Pool<T,U>::Stack::Stack(Pool<T,U>* pool) {
|
||||||
this->pool = pool;
|
this->pool = pool;
|
||||||
this->is_open = false;
|
this->is_open = false;
|
||||||
this->is_running = false;
|
this->is_running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Stack::Start() {
|
void Pool<T,U>::Stack::Start() {
|
||||||
if(this->is_open || this->is_running)
|
if(this->is_open || this->is_running)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -212,8 +214,8 @@ void Pool<T>::Stack::Start() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Stack::AddClient(T client) {
|
void Pool<T,U>::Stack::AddClient(T client) {
|
||||||
if(!this->is_open || !this->is_running)
|
if(!this->is_open || !this->is_running)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -222,8 +224,8 @@ void Pool<T>::Stack::AddClient(T client) {
|
||||||
this->clients_mtx.unlock();
|
this->clients_mtx.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
int Pool<T>::Stack::ClientCount() {
|
int Pool<T,U>::Stack::ClientCount() {
|
||||||
if(!this->is_open || !this->is_running)
|
if(!this->is_open || !this->is_running)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -234,8 +236,8 @@ int Pool<T>::Stack::ClientCount() {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Stack::StackThread() {
|
void Pool<T,U>::Stack::StackThread() {
|
||||||
|
|
||||||
while(this->is_running) {
|
while(this->is_running) {
|
||||||
for(auto client = this->clients.begin();
|
for(auto client = this->clients.begin();
|
||||||
|
@ -246,15 +248,18 @@ void Pool<T>::Stack::StackThread() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
this->clients_mtx.lock();
|
this->clients_mtx.lock();
|
||||||
if(!this->pool->ProcessClient(*client, &this->queries))
|
if(!this->pool->ProcessClient
|
||||||
|
(*client, &this->pool->context, &this->queries))
|
||||||
|
{
|
||||||
this->clients.erase(client);
|
this->clients.erase(client);
|
||||||
|
}
|
||||||
this->clients_mtx.unlock();
|
this->clients_mtx.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, class U>
|
||||||
void Pool<T>::Stack::Stop() {
|
void Pool<T,U>::Stack::Stop() {
|
||||||
if(!this->is_open || !this->is_running)
|
if(!this->is_open || !this->is_running)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue