]> git.sesse.net Git - cubemap/blobdiff - input.cpp
Deserialize/serialize inputs. Woo, totally glitch-free restarts!
[cubemap] / input.cpp
index 8307819437d687307d107b370f52e017d87be2fc..58d319f10428d74435bd8d79fb35817785f63eb1 100644 (file)
--- a/input.cpp
+++ b/input.cpp
@@ -22,6 +22,7 @@
 #include "server.h"
 #include "serverpool.h"
 #include "parse.h"
+#include "state.pb.h"
 
 using namespace std;
 
@@ -79,6 +80,37 @@ Input::Input(const string &stream_id, const string &url)
 {
 }
 
+Input::Input(const InputProto &serialized)
+       : state(State(serialized.state())),
+         stream_id(serialized.stream_id()),
+         url(serialized.url()),
+         request(serialized.request()),
+         request_bytes_sent(serialized.request_bytes_sent()),
+         response(serialized.response()),
+         has_metacube_header(serialized.has_metacube_header()),
+         sock(serialized.sock())
+{
+       pending_data.resize(serialized.pending_data().size());
+       memcpy(&pending_data[0], serialized.pending_data().data(), serialized.pending_data().size());
+
+       parse_url(url, &host, &port, &path);  // Don't care if it fails.
+}
+
+InputProto Input::serialize() const
+{
+       InputProto serialized;
+       serialized.set_state(state);
+       serialized.set_stream_id(stream_id);
+       serialized.set_url(url);
+       serialized.set_request(request);
+       serialized.set_request_bytes_sent(request_bytes_sent);
+       serialized.set_response(response);
+       serialized.set_pending_data(string(pending_data.begin(), pending_data.end()));
+       serialized.set_has_metacube_header(has_metacube_header);
+       serialized.set_sock(sock);
+       return serialized;
+}
+
 void Input::run()
 {
        should_stop = false;