msg_recv.go 8.09 KB
package main

import (
	//	"WorldTester/conf"
	db "WorldTester/db"
	"WorldTester/pb"
	"common/logger"
	"log"
	"math/rand"
	"net"
)

func init() {
	RegisterMessage(pb.MSGID_MsgID_Logon_Response, &pb.ResponseLogon{}, LoginResponseHandler)
	RegisterMessage(pb.MSGID_MsgID_CreateClub_Response, &pb.ResponseCreateClub{}, CreateClubResponseHandler)
	RegisterMessage(pb.MSGID_MsgID_JoinClub_Notice, &pb.NoticeJoinClub{}, JoinClubNoticeHandler)
	RegisterMessage(pb.MSGID_MsgID_ClubSnapshotList_Notice, &pb.NoticeClubSnapshotList{}, GetClubListNoticeHandler)

	RegisterMessage(pb.MSGID_MsgID_ClubCreaterInfo_Notice, &pb.NoticeClubCreaterInfo{}, GetClubCreaterInfoNoticeHandler)
	RegisterMessage(pb.MSGID_MsgID_ClubMemberSnapshotList_Notice, &pb.NoticeClubMemberSnapshotList{}, GetClubMemberSnapshotListHandler)
	RegisterMessage(pb.MSGID_MsgID_PurchaseClubLevel_Notice, &pb.NoticePurchaseClubLevel{}, PurchaseClubLevelHandler)
	RegisterMessage(pb.MSGID_MsgID_RechargeClubFund_Response, &pb.ResponseRechargeClubFund{}, RechargeClubFundHandler)

	RegisterMessage(pb.MSGID_MsgID_GrantClubFund_Response, &pb.ResponseGrantClubFund{}, GrantClubFundRespHandler)
	RegisterMessage(pb.MSGID_MsgID_ModifyClubInfo_Response, &pb.ResponseModifyClubInfo{}, ModifyClubInfoRespHandler)

	RegisterMessage(pb.MSGID_MsgID_SearchClubInfo_Notice, &pb.NoticeSearchClubInfo{}, GetSearchClubInfoHandler)
	RegisterMessage(pb.MSGID_MsgID_GetUserData_Notice, &pb.NoticeGetUserData{}, GetGetUserDataHandler)

}

func GetClubMemberSnapshotListHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("GetClubMemberSnapshotListHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeClubMemberSnapshotList)
	Clubids, _ := db.GetAdminClubs(int(header.PlayerID))
	for _, clubid := range Clubids {
		for _, info := range resp.Snapshots {
			log.Println("info.ClubName", info.MemberName)
			SendModifyClubMember(GetPlayer(header.PlayerID), int32(clubid), info.MemberUid)
			SendGrantClubFund(GetPlayer(header.PlayerID), int32(clubid), info.MemberUid)
		}
	}

}

func ModifyClubMemberNoticeHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("ModifyClubMemberNoticeHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeModifyClubMember)
	log.Println("CreatePlayerName", resp.TargetPlayerName)
}

func ModifyClubInfoRespHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("ModifyClubInfoRespHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.ResponseModifyClubInfo)
	log.Println("ModifyClubInfoRespHandler", resp.Error)
}

func GrantClubFundRespHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("ModifyClubMemberNoticeHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.ResponseGrantClubFund)
	log.Println("GrantClubFundRespHandler", resp.Error)
}

func RechargeClubFundHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("RechargeClubFundHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.ResponseRechargeClubFund)
	log.Println("RechargeClubFundHandler", resp.Error)
}

func PurchaseClubLevelHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("PurchaseClubLevelHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticePurchaseClubLevel)
	log.Println("ExpireTime", resp.ExpireTime)
}

func GetClubCreaterInfoNoticeHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("GetClubCreaterInfoNoticeHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeClubCreaterInfo)
	log.Println("CreatePlayerName", resp.CreatePlayerName)
}

func GetSearchClubInfoHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("GetSearchClubInfoHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeSearchClubInfo)
	log.Println("CreatePlayerName", resp.Snapshots.ClubName)
}

func GetGetUserDataHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("GetGetUserDataHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeGetUserData)
	log.Println("UserName", resp.UserName)
}

func LoginResponseHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	resp := msg.(*pb.ResponseLogon)
	v := m_map_players.Get(header.PlayerID)
	if v == nil {
		logger.Info("recvd login message response:%+v header:%+v not found playerid", *resp, header)
		return
	}
	if resp.Error != 1 {
		logger.Info("uid %d login failed with error:%+v", header.PlayerID, resp.Error)
		return
	}
	player := v.(*PlayerInfo)
	player.state = STATE_PLAYER_LOGINED

	log.Println("player.isHost:", player.isHost)
	if player.isHost {
		SendCreateClub(player)
	} else {
		SendJoinClub(player)
		log.Println("SendJoinClub")
	}
}

func CreateClubResponseHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	resp := msg.(*pb.ResponseCreateClub)
	logger.Info("create club response message noti:%+v header:%+v", *resp, header)
	log.Println("create club response message noti:%+v header:%+v", *resp, header)

	v := m_map_players.Get(header.PlayerID)
	if v == nil {
		logger.Info("recvd create message response:%+v header:%+v not found playerid", *resp, header)
		return
	}
	//	if resp.Error != 1 {
	//		logger.Info("uid %d create room failed with error:%+v", header.PlayerID, resp.Error)
	//		return
	//	}

	player := v.(*PlayerInfo)
	log.Println("CreateClubResponseHandler-player.isHost:", player.isHost)
	if player.isHost {

		SendGetClubList(player)
	}
}

func JoinClubNoticeHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("JoinClubNoticeHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeJoinClub)
	player := GetPlayer(header.PlayerID)
	if player == nil {
		logger.Info("uid not found uid:%+v", header.PlayerID)
		return
	}

	SendJoinClubReply(player, 1, resp.ClubId, resp.ClubUid)

}

func GetClubListNoticeHandler(conn net.Conn, header pb.MessageHeader, msg interface{}) {
	log.Println("GetClubListNoticeHandler-header.PlayerID:", header.PlayerID)
	resp := msg.(*pb.NoticeClubSnapshotList)
	for _, Clubinfo := range resp.List {
		log.Println("Clubinfo.ClubName", Clubinfo.ClubName)

		if createrid, err := db.GetClubCreaterId(int(Clubinfo.ClubId)); err == nil {
			player := GetPlayer(uint32(createrid))
			if player != nil {
				log.Println("$$$createrid:", createrid)
				SendSearchClubInfo(player, Clubinfo.ClubId)
				SendGetClubCreaterInfo(player, Clubinfo.ClubId)
				SendGetClubMemberSnapshotList(player, Clubinfo.ClubId)

			}
		}
	}
}

func getHostPlayer(room *RoomInfo) *PlayerInfo {
	for _, uid := range room.ids {
		p := m_map_players.Get(uid)
		player, _ := p.(*PlayerInfo)
		if player.isHost == true {
			return player
		}
	}
	return nil
}
func getRoomHostID(rid uint32) uint32 {
	v := m_map_rooms.Get(rid)
	if v == nil {
		return 0
	}
	room, _ := v.(*RoomInfo)
	host := getHostPlayer(room)
	if host == nil {
		return 0
	}
	return host.uid
}

func getMyAction(player *PlayerInfo, minbet uint32) (ignore bool, action pb.ActionType, bet uint32) {
	//r := rand.Intn(100)
	ignore = true
	//action = pb.ActionType_Enum_Action_Null
	bet = 0
	/*
		if r < 10 {
			//10%概率不做动作,让服务器做超时
			return
		}
	*/
	ignore = false
	if minbet == 0 {
		//fold or check
		r := rand.Intn(100)
		if r < 10 {
			action = pb.ActionType_Enum_Action_Fold
		} else if r < 30 {
			action = pb.ActionType_Enum_Action_Bet
			bet = 50
		} else {
			action = pb.ActionType_Enum_Action_Check
		}
	} else {
		//call or raise or allin or fold
		r := rand.Intn(100)
		if r < 20 {
			action = pb.ActionType_Enum_Action_Raise
			bet = 2 * (minbet - player.roundBet)
			if bet > player.leftMoney {
				bet = minbet - player.roundBet
				action = pb.ActionType_Enum_Action_Call
				if bet > player.leftMoney {
					bet = 0
					action = pb.ActionType_Enum_Action_Fold
				}
			}
		} else if r < 30 {
			action = pb.ActionType_Enum_Action_Fold
		} else if r < 95 {
			action = pb.ActionType_Enum_Action_Call
			bet = minbet - player.roundBet
		} else {
			action = pb.ActionType_Enum_Action_Allin
			bet = player.leftMoney
		}
	}
	player.leftMoney -= bet
	logger.Info("bet money uid:%v bet:%v left:%v roundbet:%v", player.uid, bet, player.leftMoney, player.roundBet)
	return
}