git-svn-id: svn://elaine/murooma/trunk@157 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
(no author) 2014-08-07 21:31:34 +00:00
parent e03a46d8e2
commit 0a0cb0c48a

View file

@ -15,6 +15,7 @@
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/thread/thread.hpp> #include <boost/thread/thread.hpp>
#include <chrono> #include <chrono>
#include <vector>
#include <ctime> // localtime #include <ctime> // localtime
#include <sstream> // stringstream #include <sstream> // stringstream
#include <iomanip> #include <iomanip>
@ -61,18 +62,12 @@ public:
for (;;) for (;;)
{ {
shared_ptr<WireChunk> chunk(chunks.pop()); shared_ptr<WireChunk> chunk(chunks.pop());
boost::system::error_code error;
size_t written = 0; size_t written = 0;
do do
{ {
written += boost::asio::write(*socket_, boost::asio::buffer(chunk.get() + written, sizeof(WireChunk) - written));//, error); written += boost::asio::write(*socket_, boost::asio::buffer(chunk.get() + written, sizeof(WireChunk) - written));//, error);
} }
while (written < sizeof(WireChunk)); while (written < sizeof(WireChunk));
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
} }
} }
catch (std::exception& e) catch (std::exception& e)
@ -102,7 +97,7 @@ private:
class Server class Server
{ {
public: public:
Server(unsigned short port) : session(NULL), port_(port) Server(unsigned short port) : port_(port)
{ {
} }
@ -114,15 +109,19 @@ public:
socket_ptr sock(new tcp::socket(io_service_)); socket_ptr sock(new tcp::socket(io_service_));
a.accept(*sock); a.accept(*sock);
cout << "New connection: " << sock->remote_endpoint().address().to_string() << "\n"; cout << "New connection: " << sock->remote_endpoint().address().to_string() << "\n";
session = new Session(sock); Session* session = new Session(sock);
session->start(); session->start();
sessions.push_back(session);
} }
} }
void send(shared_ptr<WireChunk> chunk) void send(shared_ptr<WireChunk> chunk)
{ {
if (session != 0) for (size_t n=0; n<sessions.size(); ++n)
session->send(chunk); {
if (sessions[n] != 0)
sessions[n]->send(chunk);
}
} }
void start() void start()
@ -136,7 +135,7 @@ public:
} }
private: private:
Session* session; vector<Session*> sessions;
boost::asio::io_service io_service_; boost::asio::io_service io_service_;
unsigned short port_; unsigned short port_;
thread* acceptThread; thread* acceptThread;