syntax = "proto3";

option go_package = "./msg";

enum roleType {
    ROLE_TYPE_UNKNOWN = 0;
    RED        = 1;  // 无操作
    BLUE   = 4;
    YELLOW   = 3;
    GREEN   = 2;
}

enum OptType {
    OPT_TYPE_UNKNOWN = 0;
    ZHI_SHAI_ZI     = 1;  
    SELECT_ROLE   = 2;
}

enum roomType {
  ROOM_TYPE_UNKNOWN = 0;
  SHUANG_REN = 1;
  SIREN_REN = 2;
}

enum roomMode {
  ROOM_MODE_UNKNOWN = 0;
  REN_JI = 1;
  WAN_JIA = 2;
}

enum roadType {
  ROAD_TYPE_UNKNOWN = 0;
  HOME =1;
}

enum playerStatus {
  PLAYER_STATUS_UNKNOWN = 0;
  SZ_ANIMATION =1;
  COLOR_FINISH = 2;
  COLOR_KICK = 3;
}

enum roomStatus {
  AWAIT = 0;
  START = 1;
  END = 2;
}

message round {
  roleType m_color = 1; 
  string m_road = 2;
  OptType opt = 3;
  int32 szNumber = 4;
}

message RoomInfo {
  repeated RoleData roles = 1;
  repeated ColorData colors = 2;
  roomType room_type = 3;
  roomMode room_mode = 4;
  roleType cur_round_color = 5;
  repeated round rounds = 6;
  repeated ColorData finish_colors = 7;
  repeated ColorData kict_colors = 8;
  int32 id = 9;
  int32 room_level = 10; //房间的每个等级都对应着不同的奖励和消耗
  roomStatus room_status = 11;
}

message RoleData {
  roleType m_color = 1;
  int32 m_seat = 2;
  string m_id = 3;
  roadType m_cur_road = 4;
  int32 step = 5;
  int32 old_setp = 6;
}

message ColorData {
  string m_id = 1;
  roleType m_color = 2;
  bool is_kick = 3;
  bool is_finish = 4;
  int32 time_out_num = 5;
  string m_name = 6;
  string m_head = 7;
  int32 rank_num = 8;
  int32 m_coin = 9;
}

message MoveStepData {
  string m_id = 1;
  int32 step = 2;
  int32 old_setp = 3;
}

message SendColorSz {
  roleType color = 1;  // 
}

message SendRoleMove {
  roleType color = 1;  // 
  string roleId = 2;
}

message NotifyPlayerSzNumber {
  roleType color = 1;  // 
  int32 szNumber = 2;   // 
  MsgError err_msg = 3;
}

message NotifyPlayerMove {
  roleType color = 1;  // 
  MoveStepData step = 2;   // 
  repeated RoleData kick = 3;
}

message NotifyPlayerOpt {
  roleType color = 1;  // 
  OptType opt = 2;   // 
  repeated RoleData canMoveRoles = 3;
}

message NotifyPlayerStatus {
  roleType color = 1;  // 
  playerStatus status = 2;
  repeated ColorData colors = 3;
}


message NotifySettlement {
  roleType color = 1;  // 
  repeated ColorData finish_colors = 2;
}


message NotifyUpdateRoomInfo {
  RoomInfo room_info = 1;  // 
}
//----------------------------------


//用户信息
message UserInfo {
  string UserId = 1;
  string m_head = 2;
  int32 m_coin = 3;
  string name = 4;
  int32 room_id = 5; //如果用户在某一个房间玩,他的id就一直存在,
  
}
//登录 请求
message ReqLogin {
  string account = 1;
  string password = 2;
}

//登录 响应
message ResLogin {
  string userId = 1;
  string nikeName = 2;
  UserInfo userInfo = 3;
  MsgError err_msg = 4;
}
//注册 请求
message ReqRegister {
  string nikeName = 1;
  string account = 2;
  string password = 3;
  string m_head = 4;
}
//注册 响应
message ResRegister {
  bool success = 1;
  MsgError err_msg = 2;
}



//进入大厅
message EnterHall {
  string userId = 1;
}
//进入大厅响应
message ResEnterHall {
  bool success = 1;
  MsgError err_msg = 2;
  RoomInfo reconnect_room_info = 3;
}

//离开大厅
message LeaveHall {
  string userId = 1;
}

//匹配ludo
message MatchLudo {
  roomType select_room_type = 1;
  int32 room_level = 2;
  roleType select_color = 3;
}
//匹配ludo 响应
message ResMatchLudo {
  bool success = 1;
  MsgError err_msg = 2;
  RoomInfo room = 3;
}
//error
message MsgError {
  int32 error_code = 1;
  string error_msg = 2;
}


message ResHeartBeat {
  string msg = 1;
}

message ReqHeartBeat {
  string msg = 1;
}