golang制作一个斗地主游戏服务器[8]:先开一个服务器再说

golang的游戏服务器框架有挺多的,  大体上一个游戏成品的客户端, 都需要接入账号系统和其他分类的系统.

这里为了简单化,  先开一个最简单的TCPServer服务器端(网络上的各种服务器框架大同小异, 这里选择用266的tcp框架. 其实是一个意思)

package main

import (
	"log"
	"time"

	connection "github.com/266game/goserver/Connection"
	tcpserver "github.com/266game/goserver/TCPServer"
)

func main() {
	// 启动服务器
	pServer := tcpserver.NewTCPServer()
	pServer.OnRead = func(pData *connection.TData) {
		// 这里是服务器收到的内容
	}
    
    // 开启一个新的端口 12345
	pServer.Start(":12345")
    
    // 这里暂时弄一个5000小时的等待, 不然进程就直接关闭了.  
	time.Sleep(time.Hour * 5000 )
}

客户端因为要操作, 得有一个带界面的库, 这里选择用govcl的客户端界面库

package main

import (
	"log"

	connection "github.com/266game/goserver/Connection"
	tcpclient "github.com/266game/goserver/TCPClient"
	"github.com/ying32/govcl/vcl"
)

// TMainForm 主窗体
type TMainForm struct {
	*vcl.TForm
	Btn1    *vcl.TButton
	pClient *tcpclient.TTCPClient
}

var mainForm *TMainForm

func main() {
	vcl.Application.Initialize()               // 应用初始化
	vcl.Application.SetMainFormOnTaskBar(true) // 设置主窗口在任务栏上显示
	vcl.Application.CreateForm(&mainForm)      // 创建主窗口
	vcl.Application.Run()                      // 程序运行
}

// -- TMainForm

// 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.OnButtonClick) // 绑定按钮1点击事件
}

// OnButtonClick 按钮点击事件
func (self *TMainForm) OnButtonClick(sender vcl.IObject) {
	// 创建一个客户端
	pClient := tcpclient.NewTCPClient()
	// 保存指针
	self.pClient = pClient

	// 客户端收到消息事件
	pClient.OnRead = func(*connection.TData) {

	}

	// 连接成功事件
	pClient.OnConnect = func(pConn *connection.TConnection) {
		self.Btn1.SetCaption("连接成功")
		log.Println(pConn.GetTCPConn().RemoteAddr().String() + "连接成功")
	}
	self.Btn1.SetCaption("连接中")
	self.Btn1.SetEnabled(false)
	// 可以开始连接了
	pClient.Connect("127.0.0.1:12345")
}

//

启动以后大概是一个这样子的界面

本文需要用到的库

go build github.com/266game/goserver
go build github.com/ying32/govcl
go build github.com/golang/protobuf

猜你喜欢

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