package msg

import "server/game/mod/item"

type Msg struct {
	Type  int          // 消息类型
	To    int          // 接收者
	From  int          // 发送者
	Item  []*item.Item // 物品
	SendT int64        // 发送时间
	End   int64        // 过期时间
	Extra interface{}  //额外信息
	Id    int64
	H     int //处理类型
}

var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE}
var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE}

const (
	//好友操作
	HANDLE_TYPE_APPLY  = iota //申请好友
	HANDLE_TYPE_DEL           //删除好友
	HANDLE_TYPE_SYNC          //同步请求
	HADNLE_TYPE_AGREE         //同意好友
	HANDLE_TYPE_REFUSE        //拒绝申请

	//卡牌操作
	HANDLE_TYPE_REQ_CARD        //请求卡牌
	HANDLE_TYPE_AGREE_CARD      //同意卡牌
	HANDLE_TYPE_REG_CARD_REFUSE //拒绝请求卡牌
	HANDLE_TYPE_REG_CARD_FINISH //请求卡牌已结束
	HANDLE_TYPE_AGREE_CARD_FAIL //同意卡牌失败

	HANDLE_TYPE_EX_CARD            //置换卡牌
	HANDLE_TYPE_SELECT_EX_CARD     //选择置换卡牌
	HANDLE_TYPE_ARGREE_EX_CARD     //同意置换卡牌
	HANDLE_TYPE_REFUSE_SELECT_CARD //B拒绝选择置换卡牌
	HANDLE_TYPE_REFUSE_EX_CARD     //A拒绝置换卡牌

	HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT //置换卡牌选择超时
	HANDLE_TYPE_EX_CARD_TIMEOUT        //置换卡牌超时

	HANDLE_TYPE_SEND_CARD //赠送卡牌

	HANDLE_TYPE_INVITE_FRIEND     //邀请好友
	HANDLE_TYPE_INVITE_ADD_FRIEND //自动添加好友
	// 榜单操作
	HANDLE_TYPE_RANK        //榜单操作
	HANDLE_TYPE_RANK_INFO   //榜单信息
	HANDLE_TYPE_RANK_NOTIFY //榜单信息
	// 邮件操作
	HANDLE_TYPE_MAIL //邮件操作

	// 锦标赛
	HANDLE_TYPE_CHAMPSHIP_GROUP   //锦标赛分组操作
	HANDLE_TYPE_CHAMPSHIP_INRANK  //锦标赛入榜操作
	HANDLE_TYPE_CHAMPSHIP_AI      //锦标赛入榜操作
	HANDLE_TYPE_CHAMPSHIP_NOTIFY  //锦标赛排名变动通知
	HANDLE_TYPE_CHAMPSHIP_ZERO    //锦标赛0点更新
	HANDLE_TYPE_CHAMPSHIP_NOTIFY2 //锦标赛0.30点通知
	// 服务器变量
	HANDLE_TYPE_VAR_GET //获取变量
	HANDLE_TYPE_VAR_SET //设置变量

	//server mod handle
	SERVER_ZERO_UPDATE        //zero update
	HANDLE_TYPE_PLAYROOM_LOSE // playroom偷取物品
	SERVER_NOON_UPDATE        // 12点更新

	FRIEND_TREASURE_HANDLE  //好友宝藏操作
	HANDLE_TYPE_MAIL_ADD    //添加邮件
	HANDLE_TYPE_MAIL_RELOAD //重新加载邮件
)

const (
	// 集群
	CLUSTER_HANDSHAKE_1 = 10001 //握手1
	CLUSTER_HANDSHAKE_2 = 10002 //握手2
	CLUSTER_JOIN        = 10003 //加入
	CLUSTER_EXIT        = 10004 //退出

	CLUSTER_FRIEND_SYNC = 10005 //集群好友消息同步
)

func Handle(fun func(Msg) error, m Msg) error {
	return fun(m)
}
