syntax="proto3";
package protos;

import "structures.proto";

// 心跳
message C_Heartbeat{
	int64 ts = 1;			// 保留
}

message S_Heartbeat{
	int64 ts = 1;			// server unix timestamp (seconds)
}

// 登录
message C_Login{
	string token=1;
}

message S_Login{
	int32 ec 			= 1;		// 失败代码
	string account 		= 2;		// 账号
	string nickname 	= 3;		// 昵称
	uint64 guid 		= 4;		// GUID
	int32 icon 			= 5;		// 头像索引
	int64 balance 		= 7;		// 余额
	int64 bank 			= 8;		// 银行余额
	int64 freezed 		= 10;		// 冻结金额(暂时不用)
	string area 		= 11;		// 地区
	string ip 			= 12;		// IP
	string phone 		= 13;		// 手机号
	int32  vip 			= 15;		// VIP 等级
	string qq 			= 18;		// qq
	string wechat 		= 19;
	int64 bets 			= 20;		// 当前总下注
	int64 nextVipNeed 	= 21; 		// 下一级 vip 的标准(充值量)。// 如果当前等级最高，这个值为 0
	string bankPass 	= 22;		// 保险箱密码
	string name 		= 23;		// 姓名(支付宝)
	string alipay 		= 24;		// 支付宝账号
	ReconnectInfo gameInfo = 25;	// 断线重连链接
	string email		= 26;
	string birthday 	= 27;
	string verMainServer 	= 28;		// 服务器主版本号
	string verClient 		= 29;		// 客户端版本号
}

// 登出
message C_Logout{
	
}

message S_Logout{
	int32 ec = 1;
}

// 推送热门游戏列表
message S_HotGames{
	repeated GameItemEntry hots=1;
}

// 请求次级目录
// 如果请求 S_HotGames, 请求 Id = GameNavbar.CARD_GAMES
message C_ChildrenItemsOf {
	int64 parentId = 1;
}

message S_ChildrenItemsOf {
	int64 parentId = 1;
	repeated GameItemEntry list = 5;	// 次级列表
}

// 游戏目录或游戏变更
// 本协议暂时不实际传输数据，客户端收到本协议后，如果有缓存，可清空缓存，重新请求 C_NextItemList
message S_Ntf_ItemsChanged{
	repeated GameItemEntry newList = 1; 	// 暂时保留
}

//请求进入游戏
message C_EnterGame {
	int64 gameId = 1;
	repeated string gameParam = 2;
}

message S_EnterGame {
	int32 ec = 1;
	int64 gameId = 2;
	string url = 3;
	string reserved=4;		// 未完成
	repeated string gameParam = 5;
}

// 离开游戏
message C_LeaveGame{
	int64 gameId = 1;
	repeated int32 gameParam = 2;
}

message S_LeaveGame{
	int32 ec = 1;
	int64 gameId = 2;
}

// 用户设置
message C_UserSettings{
	string nickname = 1;
	string email 	= 2;
	string birthday = 3;
	int32 icon 		= 7;
	string qq 		= 8;
	string wechat 	= 9;
}

message S_UserSettings{
	int32 ec 		= 1;
	string nickname = 2;
	string email 	= 3;
	string birthday = 4;
	int32 icon 		= 7;
	string qq 		= 8;
	string wechat 	= 9;
}

message C_UpdatePassword{
	string oldPassword 	= 1;
	string password 	= 2;
}

message S_UpdatePassword{
	int32 ec = 1;
	string password = 2;
}

// 验证码修改密码
message C_UpdatePasswordV {
	string password 	= 1;
	string verifyCode 	= 2;
}

// 存取款
message C_UpdateBankBalance {
	int64 delta = 1;	// 对银行操作,以银行为视角,正值代表存款,负值代表取款
	string bankPass = 2;
}

message S_UpdateBankBalance{
	int32 ec = 1;
	int64 balance 	= 2;		// 操作后金币值
	int64 bank 		= 4;		// 操作后银行值
	int64 delta 	= 5;
}

/// 保险箱密码操作

// 修改/设置
message C_UpdateBankPassword{
	string oldPassword = 1;		// 第一次设置为空
	string newPassword = 2;		// 取消密码为空
	string loginPassword = 3;	// 该账号登录密码
}

message S_UpdateBankPassword{
	int32 ec = 1;
	string bankPass = 2;
}

// 保险箱认证 deprecated
message C_AuthBank {
	string password = 1;
}

message S_AuthBank {
	int32 ec = 1;
}

//
message C_UserBalance {

}

// 玩家金币变动, 请求响应 + 推送
message S_Ntf_UserBalance {
	int32  ec = 1;
	uint64 guid 	= 2;	// 变动的玩家
	int32 reason 	= 3;	// 变动原因
	int64 balance  	= 4;	// 变动后金币数
	int64 delta 	= 5;	// 变动多少
}

// 请求手机号验证码
message C_VerifiCode {
	string phone = 1;	
}

message S_VerifiCode {
	int32 ec = 1;
}

// 绑定手机
message C_BindPhone {
	string phone 	= 1;
	string code  	= 2;		// 验证码
	string password = 3;	// 密码
}

message S_BindPhone {
	int32 ec = 1;
	string phone 	= 2;	//
	string password = 3;	//
}

// 綁定支付寶，提過一次現則不能再次修改
message C_BindAlipay {
	string alipay 	= 1;
	string name 	= 2;
}

message S_BindAlipay {
	int32 ec 		= 1;	
	string alipay 	= 2;
	string name		= 3;
}

// 系統個人消息
message C_PrivateMail {
}

message S_PrivateMail {
	int32 ec 			= 1;			//
	repeated Mail mails = 2;	
}

message C_RemPrivateMail{
	repeated int32 ids = 1;
}

message S_RemPrivateMail {
	int32 ec = 1;		//
}

// 查询消息/公告数量
message C_QueryMessage {

}

// 通知有消息/公告
message S_Ntf_NewMessage {
	int32 mails		= 1;	// 私信数量
	int32 notices	= 2;	// 公告数量
}

// 活動
message C_Activity {

}

message S_Activity {
	int32 ec		= 1;
	string jsn 		= 2;		// json str
}

// 公告
message C_Notice {

}

message S_Notice {
	int32 ec 					= 1;
	repeated Notice notices		= 2;
}

// 银行金币变动， 这个不会推送给除自己外的其他玩家
message S_Ntf_UserBank{
	int32 ec = 1;
	int32 reason 	= 3;		// 原因代码
	int64 bank 		= 4;		// 最新余额
	int64 delta 	= 5;		// 变化量
}

// 发送协议服务端不支持或未实现，统一回复，错误码为 CMD_UNSUPPORT
message S_Default{
	int32 ec = 1;
}

// 通知玩家离线
message S_Offline {
	int32 reason = 1;	// 原因
}

// 跑马灯
message C_Marquee {

}

message S_Ntf_Marquee {
	int32 ec 				= 1;
	repeated Marquee mqs 	= 2;
}

// 紧急通知
message S_Ntf_EmergencyNotice {
	int32 	id 		= 1;
	string title	= 2;
	string content  = 3;
	string from 	= 4;		// 发送人 未使用
	int64  time 	= 5; 		// 起止时间 endat
	int64  endat 	= 6;
	int32  level 	= 8;		// 紧急级别 未使用
}

message C_Config {
	int32 flag 	= 1;	// unused
}

// 客户端配置
message S_Ntf_Config {
	string jsn 		= 1;						//
}

message C_VIPInfo {
	int32 reserved 	= 1;
}

message S_VIPInfo {
	int32 ec 					= 1;		//
	int32 level					= 2;		// 当前等级
	int64 bets					= 3;		// 当前总下注点数
	int64 target 				= 4;		// 升级要达到的点数
	repeated ValueTimes bonus	= 7;		// 可领取的金额， len(bonus)>=4 对应 单次，周，月, 救济金 val <= 0 不可领
	repeated VipConfItem conf	= 10;		// vip 配置表
}

message C_GetVipBonus {
	int32 type 		= 1;		// 见 VipBonus
	int32 level		= 2;
}

message S_GetVipBonus{
	int32 ec		= 1;
	int32 type 		= 2;
	int32 level 	= 3;
	int64 delta 	= 5;  		// >=0 ec == 0 时， 表示领取金额
}

// vip 等级变更通知
message S_NtfVipChange {
	int32 vip	= 1;	// 变更后的 vip 等级
}

//////////// 7 日签到奖励
message C_Checkin7 {
	
}

message S_Checkin7 {
	int32  ec 					= 1;
	repeated CheckinItem status	= 2;	// 长度为 7,  表示 7 日领取状态
	repeated DimInt64 conf 		= 3;	// 下标表示 vip 等级, 值表示对应等级对应天可领取金额，单位为分
}

message C_CheckinGet {
	int32 day			= 1;			// 第几天， 1 表示第一天， 类推。 0 表示自动领取
}

message S_CheckinGet {
	int32 ec 			= 1;
	int64 delta 		= 2;			// ec == 0 时, 表示领取到的金额(分)
}

////////////////////////////////////////// 30 d 签到
message C_Checkin30Status {
	
}

message S_Checkin30Status {
	int32 ec 			= 1;
	int32 vip 			= 5;
	CheckinItem daily 	= 7;			// 日签状态
	repeated CheckinItem ext = 8;		// 连续签到状态
}

//签到
message C_GetChechin30 {
	
}

message S_GetCheckin30 {
	int32 ec 	 	= 1;
	int64 delta 	= 2;
}

// 领取额外奖励
message C_GetCheckin30Ext {
	int32 index 	= 1;		// S_Checkin30Status 中 ext 的下标
}

message S_GetCheckin30Ext {
	int32 ec 	 	= 1;
	int64 delta 	= 2;
}

/////////// 救济金
message C_Alms {

}

message S_Ntf_Alms {
	int32 ec 		= 1;
	int64 amount 	= 2;	// 本次可领取金额
	int32 times 	= 3;	// 今日剩余可领取次数
}

message C_AlmsGet {

}

message S_AlmsGet {
	int32 ec 		= 1;
	int64 amount 	= 2;	// 本次领取
	int64 cur 	 	= 3;	// 当前次数
	int64 total 	= 4;	// 总可领次数
}

/////////// 任务
message C_GameTask {					//获取游戏任务

}

message S_GameTask {
	int32 ec 					= 1;	// 0:获取游戏任务成功; 500:反之
	repeated GameTask gameTasks = 2;
}

message C_ReceiveReward {			//任务完成获取奖励金
	int32 taskId = 1;
}

message S_ReceiveReward {
	int32 ec					= 1;		// 0:领取成功; 500:领取失败
	GameTask gameTask 			= 2;
}

//////////////  未读客服消息
message C_Unread {			// 不使用

}

message S_Ntf_Unread {
	int32 customer_service 		= 1;		// 客服消息条数
}

//////////////////// 幸运转盘

// 积分转盘
message C_TurnTableStatus {
}

message S_TurnTableStatus {
	int32 ec 				= 1;
	int64 recharge 			= 2;	// 今日充值(分)
	int32 totalTimes 		= 4;	// 总次数
	int32 times 			= 3;	// 剩余可使用次数
	repeated int64 turntable = 9;	// 转盘金额(分)
}

message C_TurnTablePlay {
}

message S_TurnTablePlay {
	int32 ec 				= 1;
	int32 index 			= 2; 	// conf 下标
	int32 times 			= 4;	// 剩余可使用次数
}

message C_TurnTableGet {
	
}

message S_TurnTableGet {
	int32 ec 			= 1;	// =0 时 将发送 S_Ntf_Balance
	int64 reward 		= 2; 	// 中奖金额(分)
}

message S_Ntf_RedEnvelope{
	int32 ec 			= 1;
}

message C_RedEnvelope{

}

message S_RedEnvelope{
	int32 ec 				= 1;
	int64 reward 			= 2;  //红包金额
}