golang制作一个斗地主游戏服务器[9]:pb基础

根据前面文章的协议    golang制作一个斗地主游戏服务器[7]:服务器和协议的一些想法

message TDDZ
{
    message THeader
    {
        头部应该包含很多内容, 目前先不填
    }

  

    optional THeader    Header  = 1;
    optional int32      Command = 2;

    optional TGetServerInfoReq GetServerInfoReq = 11;
    optional TGetServerInfoRsp GetServerInfoRsp = 12;
    optional TGetTableInfoReq GetTableInfoReq = 13;
    optional TTableInfo TableInfo = 14;
    optional TGetTableInfoRsp GetTableInfoRsp = 15;
    optional TJoinTableReq JoinTableReq = 16;
    optional TJoinTableRsp JoinTableRsp = 17;
    optional TPlayerInfo PlayerInfo = 18;
    optional TPlayerComeInBc PlayerComeInBc = 19;
    optional TGameStartBc GameStartBc = 20;
    optional TDealCardBc DealCardBc = 21;
    optional TCallDZBc CallDZBc = 22;
    optional TCallDZReq CallDZReq = 23;
    optional TCallDZRsp CallDZRsp = 24;
    optional TOutCardBc OutCardBc = 25;
    optional TOutCardReq OutCardReq = 26;
    optional TOutCardRsp OutCardRsp = 27;
    optional TGameOverBc GameOverBc = 28;
}

这里制定一个需要发送的最终的协议, 里面包含住所有需要的发送的协议的集合

看起来不是一个很好的方法, 但是是最简单的方法.

protoc.exe --plugin=protoc-gen=protoc-gen-go.exe --go_out=../ *.proto

通过上面的命令把原始的pb文件转成 golang 使用的 pb.go文件

里面有两个文件  一个是把proto转成pb中间文件的 protoc.exe,  可以自己用MAKE去编译一份官方版本,  另一个是把pb中间文件变成pb.go的 gen-go.exe

找不到的话可以在这里下载https://github.com/266game/tools/tree/master/protobuf2

成功执行命令以后会生成一个 ddzpb.pb.go 文件, 暂时放着不管它先

-------------------------------------------------------------------------------------------------------------

回到客户端给服务器发送协议

弄一个新按钮 Btn2

// OnFormCreate 主窗口创建事件
func (self *TMainForm) OnFormCreate(sender vcl.IObject) {
	self.SetCaption("这是一个游戏服务器")
	self.Btn1 = vcl.NewButton(self)           // 创建按钮
	self.Btn1.SetParent(self)                 //设置爸爸
	self.Btn1.SetBounds(10, 10, 88, 28)       //设置位置
	self.Btn1.SetCaption("开始连接")              //
	self.Btn1.SetOnClick(self.OnButton1Click) // 绑定按钮1点击事件

	self.Btn2 = vcl.NewButton(self)
	self.Btn2.SetParent(self)                 //设置爸爸
	self.Btn2.SetBounds(10, 50, 88, 28)       //设置位置
	self.Btn2.SetCaption("快速加入")              //
	self.Btn2.SetOnClick(self.OnButton2Click) // 绑定按钮1点击事件
}

// OnButton2Click 快速加入 按钮点击事件
func (self *TMainForm) OnButton2Click(sender vcl.IObject) {
	pack := &ddzpb.TDDZ{}
	pack.Command = proto.Int32(11) // 假装发送获取服务器信息
	buff, _ := proto.Marshal(pack)
	self.pClient.WritePack(buff)
}

在服务器端这边解包

	// 启动服务器, 首先要连接中心服务器
	pServer := tcpserver.NewTCPServer()
	pServer.OnRead = func(pData *connection.TData) {
		//
		pack := &ddzpb.TDDZ{}
		proto.Unmarshal(pData.GetBuffer(), pack)
		log.Println("收到包", pack)
	}

这样一个基础TCP就搞定了

猜你喜欢

转载自blog.csdn.net/warrially/article/details/88799754