]> git.sesse.net Git - cubemap/blobdiff - server.cpp
Start working on serialization.
[cubemap] / server.cpp
index f5c117b6dcbad54ac13ac30e89e861f8c5943130..9c4219a4789d263bc2d8b61a8d8e65143d717bad 100644 (file)
 #include "metacube.h"
 #include "server.h"
 #include "mutexlock.h"
+#include "state.pb.h"
 
 using namespace std;
 
+Client::Client(int sock)
+       : state(Client::READING_REQUEST),
+         header_bytes_sent(0),
+         bytes_sent(0)
+{
+       request.reserve(1024);
+}
+       
+Client::Client(const ClientProto &serialized)
+       : sock(serialized.sock()),
+         state(State(serialized.state())),
+         request(serialized.request()),
+         stream_id(serialized.stream_id()),
+         header(serialized.header()),
+         header_bytes_sent(serialized.header_bytes_sent()),
+         bytes_sent(serialized.bytes_sent())
+{
+}
+
+ClientProto Client::serialize() const
+{
+       ClientProto serialized;
+       serialized.set_sock(sock);
+       serialized.set_state(state);
+       serialized.set_request(request);
+       serialized.set_stream_id(stream_id);
+       serialized.set_header(header);
+       serialized.set_header_bytes_sent(serialized.header_bytes_sent());
+       serialized.set_bytes_sent(bytes_sent);
+       return serialized;
+}
+
 Server::Server()
 {
        pthread_mutex_init(&mutex, NULL);
@@ -96,14 +129,7 @@ void Server::do_work()
 void Server::add_client(int sock)
 {
        MutexLock lock(&mutex);
-       Client new_client;
-       new_client.sock = sock;
-       new_client.request.reserve(1024);
-       new_client.state = Client::READING_REQUEST;
-       new_client.header_bytes_sent = 0;
-       new_client.bytes_sent = 0;
-
-       clients.insert(make_pair(sock, new_client));
+       clients.insert(make_pair(sock, Client(sock)));
 
        // Start listening on data from this socket.
        epoll_event ev;