syntax = "proto2";

package overworld;


/////////////////////////////////////////////////////////
// Top level message                                   //
/////////////////////////////////////////////////////////
message overworld {
    oneof msg {
        session_request session_request = 1;
        session_new     session_new     = 2;
        session_beacon  session_beacon  = 3;
        session_ping    session_ping    = 4;
        session_pong    session_pong    = 5;
    }
}

/////////////////////////////////////////////////////////
// Session Messages                                    //
/////////////////////////////////////////////////////////

// client --> server
message session_request {
    optional bytes reconnect_token = 1; // secret
}

// server --> client
message session_new {
    // initialize a session and send to the client. 
    required uint64 id              = 1; // public
    required bytes  reconnect_token = 2; // secret
}

// server --> client
message session_beacon {
    required uint64 id = 1;
}

// client --> server
message session_ping {
    required uint64 id = 1;
}

// server -> client
message session_pong {
    // send the most recent estimate for latency back to the client
    required uint64 latency = 1;
}
