Ahoj všem, učím se C++, ale nějak cítím že to není ono a hledám inspiraci jak to udělat lépe.
/* obsluhovač všech socketů */
class SocketDispatcher
{
static std::vector<Socket *> sockets;
...
};
/* třída se socketem, umožnující volat callback při příjmu dat */
class Socket
{
void (*cb)(void*, Socket*, void*, size_t) = NULL;
void *cb_param = NULL;
...
}
/* parser příchozích dat JSON protokolu */
class jproto {
void fetch(void *data, size_t len);
bool process(Json::Value &out);
...
};
/* třída s klientem, konstruktor nastaví callbacky, receive_msg příjme data, zparsuje pomocí třídy jproto a poté předá funkci process_msg() */
class client
{
jproto parserů
client(char *ip, uint16_t port, double period);
void receive_msg(void* obj, Socket* s, void* data, size_t len);
void process_msg(Socket* s, Json::Value& msg);
...
}
client::client(char *ip, uint16_t port, double period) : ip(ip), port(port), period(period)
{
uint32_t addr = inet_addr(ip);
s = new Socket(addr, port, PROTO_TCP, true);
if(s->is_valid())
{
s->set_receiver(receive_msg, this);
SocketDispatcher sd;
sd.get()->add(s);
}
}
void client::receive_msg(void* obj, Socket* s, void* data, size_t len)
{
eluclient *_this = (eluclient *) obj;
_this->parser.fetch(data, len);
Json::Value msg;
while(_this->parser.process(msg))
_this->process_msg(s, msg);
}
Funguje to jak jsem chtěl, ale chtěl bych se vyhnout "_this", a také bych případně chtěl vědět, jak napsat callback v třídě Socket tak, aby jsem mohl volat nestatickou členskou metodu jakékoliv třídy. Díky za rady