From c030b2244662eecd5444d8d3ec1d8b2dd5ef2d44 Mon Sep 17 00:00:00 2001 From: marcelb Date: Tue, 26 Sep 2023 20:00:37 +0200 Subject: [PATCH] Working on pool socket support --- lib/tcp_socket.hpp | 22 ++++++++++++++++++++++ src/tcp_socket.cpp | 37 +++++++++++++++++++++++++++++++++++++ test/client.cpp | 37 +++++++++++++++++++++++-------------- test/client.o | Bin 78712 -> 74752 bytes test/compile-server.sh | 2 +- test/server.cpp | 22 +++++++++++++++++----- test/server.o | Bin 70856 -> 73864 bytes 7 files changed, 100 insertions(+), 20 deletions(-) diff --git a/lib/tcp_socket.hpp b/lib/tcp_socket.hpp index d1819f5..51e2c16 100644 --- a/lib/tcp_socket.hpp +++ b/lib/tcp_socket.hpp @@ -53,6 +53,7 @@ class server { void sync(void (*handlecli)(client&), const uint timeout = 100); void async(const uint limit, void (*handlecli)(client&, mutex&), const uint timeout = 100); + void pool(const uint limit, void (*handlecli)(client&, mutex&), const uint timeout = 100); }; @@ -100,6 +101,27 @@ class client { ~client (); bool push (const string msg); string pull (size_t byte_limit = 1024); + + /** + * ustvari ne znam jel konekcija aktivna + * kod za connect i disconnect je konstruktoru - destruktoru + */ +}; + + +class Pool { + public: + uint numcli; + vector> drops; + + // konstruktor za klijente bez servera + Pool (const uint _numcli, const string address, const ushort port, const uint timeout = 100, SSL_CTX* securefds = NULL); + // konstruktor za klijente sa serverom + Pool (const server *_srv, const uint _numcli, const uint timeout = 100, SSL_CTX* securefds = NULL); + ~Pool(); + + void run(); + }; #endif \ No newline at end of file diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp index f1fe0c6..3a3e6bc 100644 --- a/src/tcp_socket.cpp +++ b/src/tcp_socket.cpp @@ -380,3 +380,40 @@ string client::pull(size_t byte_limit) { return string(res); } + + +Pool::Pool(const uint _numcli, const string address, const ushort port, const uint timeout, SSL_CTX* securefds) { + if (_numcli > 1 ) { + numcli = _numcli; + } + else { + throw string("[ERROR] Invalid number of instances in pool "); + } + + for (uint i=0; i 1 ) { + numcli = _numcli; + } + else { + throw string("[ERROR] Invalid number of instances in pool "); + } + + for (uint i=0; i thr; - for (uint i=0; i thr; + // for (uint i=0; iKo(FeDQ)l4Rm!5&{(k1C}wy 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

aj{!AfUh{biYQnV~{0)e>Z$(~!{*UDr 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 E078iFp8x;= literal 78712 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 IB}>uxKf42RBme*a diff --git a/test/compile-server.sh b/test/compile-server.sh index 9a9e315..8defd91 100644 --- a/test/compile-server.sh +++ b/test/compile-server.sh @@ -1 +1 @@ -g++ server.cpp ../src/* -o server.o -lssl -lcrypto \ No newline at end of file +g++ server.cpp ../src/* -o server.o -lssl -lcrypto -lpthread \ No newline at end of file diff --git a/test/server.cpp b/test/server.cpp index edfe269..5adc414 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -49,16 +49,28 @@ int main() { // sleep(80); - cout << "init server " << endl; + // cout << "init server " << endl; + // server myserver(5000, 100); + // cout << "init client " << endl; + // myserver.async(8, [](client &cli, mutex &io) { + // cout << "Klijent " << cli.ipv4 << endl; + // string fromclient = cli.pull(); + // io.lock(); + // cout << "S klijenta " << fromclient << endl; + // io.unlock(); + // // fromclient += teststr; + // cli.push(fromclient); + // }, 200); + server myserver(5000, 100); - cout << "init client " << endl; - myserver.async(8, [](client &cli, mutex &io) { + myserver.pool(10, [](client &cli, mutex &io) { cout << "Klijent " << cli.ipv4 << endl; string fromclient = cli.pull(); - io.lock(); + // io.lock(); cout << "S klijenta " << fromclient << endl; - io.unlock(); + // io.unlock(); // fromclient += teststr; + usleep(10000); cli.push(fromclient); }, 200); diff --git a/test/server.o b/test/server.o index 73fac41bb2cc94c8bc175116aa9f0a1145ea75ea..2348dfd56f09e85c3fc416fbe028e61fd337f143 100755 GIT binary patch delta 22214 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 bCZKk`OQ(gX9ejN0!&Q{dYUyu&YRvxw_;i1u delta 20780 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