syntax = "proto3";

package protos;

import "userinfo.proto";
import "result.proto";

// 载入游戏请求
message RestoreRequest {
}

// 载入游戏响应
message RestoreResponse {
    repeated UserInfo Users = 1;
    uint64 Step = 2;
    map<string, bytes> state = 3;
    string Road = 4;
    uint64 CreateAt = 5;
    int32 stageIndex = 6;
}

// 同步消息
message SyncRequest {
    uint64 Step = 1;
    map<string, bytes> Values = 2;
}

// 同步消息响应
message SyncResponse {
    bool Status = 1;
    uint64 Step = 2; // status=false时才有值
    map<string, bytes> Values = 3; // status=false时才有值
    uint64 T = 4; // 服务器收到sync request的时间戳(毫秒)
}

// 客户端发送实时消息
message DMessageRequest {
    repeated uint32 UserIDs = 1;
    map<string, bytes> Values = 2;
}

// 服务器响应用户实时消息结果
message DMessageResponse {
    Result Result = 1;
}

// 服务器转发实时消息
message DMessagePush {
    map<string, bytes> Values = 1;
}

// 同步消息推送
message SyncPush {
    uint64 Step = 1;
    map<string, bytes> Values = 2;
    uint64 T = 3; // 服务器开始推送时间戳
}

// 服务器合并用户操作给master
message MasterPush {
    uint64 Step = 1;
    map<string, bytes> Values = 2;
    uint64 T = 3; // 服务器开始推送时间戳
}

// 主机广播消息给flower
message MasterNotify {
    uint64 Step = 1;
    map<string, bytes> Values = 2;
}

// 主机广播消息给flower
message MasterNotifyResponse {
    uint64 T = 1; // 服务器收到MasterNotify的时间戳(毫秒)
}

// 主机存储状态
message MasterStoreNotify {
    map<string, bytes> Values = 1;
}

// 主机读取状态
message MasterLoadRequest {}

// 同步消息响应
message MasterLoadResponse {
    Result Result = 1;
    map<string, bytes> Values = 2;
}

// 同步消息
message PartySyncRequest {
    uint64 Step = 1;
    map<string, bytes> Values = 2;
}

// 同步消息响应
message PartySyncResponse {
    bool Status = 1;
    uint64 Step = 2; // status=false时才有值
    map<string, bytes> Values = 3; // status=false时才有值
    uint64 T = 4; // 服务器收到sync request的时间戳(毫秒)
}

// 同步消息推送
message PartySyncPush {
    uint64 Step = 1;
    map<string, bytes> Values = 2;
    uint64 T = 3; // 服务器开始推送时间戳
}