一日一点RakNet(38)--Lobby2Client PC

一日一点RakNet(38)--Lobby2Client PC,第1张

概述大厅服务器   数据库支持好友,房间,邮件,排名和更多功能        大厅服务器是一个提供了PostgreSQL数据库驱动功能的插件,使用数据库可以持久化游戏数据和比赛信息(也即将游戏数据存入数据库长期存放)。大厅服务器本身不要求特别多的用户交互,涉及交互的地方的交互命令是通过LobbyClient_PC类执行。        大厅服务器分为两个类,LobbyServer本身单独提供了网络功能

大厅服务器

数据库支持好友,房间,邮件,排名和更多功能

大厅服务器是一个提供了Postgresql数据库驱动功能的插件,使用数据库可以持久化游戏数据和比赛信息(也即将游戏数据存入数据库长期存放)。大厅服务器本身不要求特别多的用户交互,涉及交互的地方的交互命令是通过LobbyClIEnt_PC类执行。

大厅服务器分为两个类,LobbyServer本身单独提供了网络功能,调用接口就可以生成一个数据库。LobbyServerPostgresql,可以在文件DependentExtensions\Lobby\LobbyServer_Postgresql\LobbyServer_Postgresql.h中找到,它是LobbyServer的一个实现,使用Postgresql来驱动数据库。

基本类有连接到数据库,创建和删除基本表的的函数方法。例子可以在LobbyServer工程中的Samples/LobbyServerTest/LobbyServerTest.cpp文件中找到,其中做了详细说明。

一个额外的要求是Functor类的使用。FunctorRakNet中的类,它实现了可以在FunctionThread中异步运行的特定功能单元,FunctionThreadRakNet中另外一个功能类。大部分情况下,你不需要要担心这个Functor——然而,有一个Functor是需要关注的,它就是向数据库中加入新的Titles(游戏/应用程序)Functor

如何实现在下面的例子中做了说明:

// 这个functor向数据库中异步加入一个Title,完整的例子位于LobbyDB_PostgresqlTest

AddTitle_PostgresqlImpl *functor = AddTitle_PostgresqlImpl::Alloc();

printf("Adds a Title to the database\n");

printf("Enter Title name: ");

gets(inputStr);

if (inputStr[0]==0)

strcpy(inputStr,"Hangman EXTREME!");
functor->Titlename = inputStr;

printf("Enter Title password (binary): ");

gets(inputStr);

if (inputStr[0]==0)

strcpy(inputStr,"SECRET_PER_GAME_LOGIN_PW_PREVIoUSLY_SETUP_ON_THE_DB");

functor->TitlePassword = AddTitle_PostgresqlImpl::AllocBytes((int) strlen(inputStr));
functor->TitlePasswordLength = (int) strlen(inputStr);
memcpy(functor->TitlePassword,inputStr,functor->TitlePasswordLength);
functor->allowClIEntAccountCreation=true;
functor->lobbyIsGameIndependent=true;
functor->defaultAllowUpdateHandle=true;
functor->defaultAllowUpdateCCInfo=true;
functor->defaultAllowUpdateAccountNumber=true;
functor->defaultAllowUpdateadminLevel=true;
functor->defaultAllowUpdateAccountBalance=true;
functor->defaultAllowClIEntsuploadActionHistory=true;
//
将这个functor放入处理队列,那么在后面线程会处理它

// 参考LobbyDB_PostgresqlTest,TitleValIDationDB_PostgresqlTest,RankingServerDBTest

// 工程,查看functor 的完整例子。

lobbyServer.PushFunctor(functor);

这段代码将带有各种属性的Title加入到了数据库中,这些属性表明了可以在这个数据库中进行哪些类型的 *** 作。在DependentExtensions\Lobby\TitleValIDationDBSpec.h文件中查看AddTitle_Data类声明,详细了解每一个参数的解释。其他的一些functor用于执行各种数据库 *** 作。DependentExtensions/*_PostgreRepository目录中包含了这些实现,但是数据成员和函数的注释文档包含在DependentExtensions\Lobby\*DBSpec.h文件中。测试程序和各种 *** 作的例子可以再TitleValIDationDB_PostgresqlTestRankingServerDB_PostgresqlTestLobbyDB_PostgresqlTest工程中找到。

参考LobbyServerTest例子,查看运行LobbyServer的控制台应用程序。

需要的文件(使用Postgresql):

目录DependentExtensions\Lobby中的所有文件,除了ClIEnt使用的文件

目录DependentExtensions\Lobby\LobbyDB_PostgreRepository中的所有文件

目录DependentExtensions\Lobby\LobbyServer_Postgresql中的所有文件

目录DependentExtensions\Lobby\RankingServerDB_PostgreRepository 中的所有文件

目录DependentExtensions\Lobby\TitleValIDationDB_PostgreRepository中的所有文件

目录DependentExtensions\PostgresqlInterface中的所有文件

如果想要使用控制台程序,可以参考目录Samples\LobbyServerTest中的文件。

所有依赖的文件(使用Postgresql):

Postgresql 8.2或更新版本,安装到C:\Program files\Postgresql.2。如果安装目录不是这个,要修改工程的属性路径。不要忘记检查Postgresql安装中是否安装了开发工具,否则头文件和libs不会背安装。

Lobby ClIEnt(PC)

数据库的用户接口

快速开始:

1. 将插件附加到RakPeerInterface实例上,并且连接到服务器。

2. 使用LobbyClIEntInterfaceCB的派生实例调用SetCallbackInterface()方法。系统的一般设计是所有的调用都是异步进行,那么每一次调用都会将结果(成功或失败)返回到相应的注册回调。

3. 如果还没有账户,调用Registeraccount方法在大厅创建一个用户账户。等待LobbyClIEntInterfaceCB::Registeraccount_Result()方法返回,查看它的查询是否成功。一种失败原因是名字已经使用,或者是不允许使用的用户名。

4.使用标识了你正在使用的数据库的信息调用SetTitleLoginID()方法(如果每一个大厅允许多游戏,那么可以再后面调用该方法)。这个机制应该硬编码进游戏中,当数据库加入到服务器时被返回。

5. 使用你刚刚创建的账户(或先前存储的账户)获得调用Login()方法。等待LobbyClIEntInterfaceCB::Login_Result()方法返回,看是否调用成功。如果有好友,应该得到LobbyClIEntInterfaceCB::FrIEndStatus_Notify()函数的调用返回,通知他们你已经上线。

6. 使用DownloadRooms()方法获得所有房间的列表,给予搜索过滤器,紧接着是JoinRoom(),SetReadytoplayStatus()StartGame()方法的调用。或者使用Quickmatch()方法自动启动一个有指定玩家数据的游戏。

7. 一旦游戏开始,会得到LobbyClIEntInterfaceCB::StartGame_Notify()方法调用。这个方法可以给你提供所有玩家的IP地址,参与者,以及谁是仲裁者,用户处理人以及与游戏相关的其他的信息。在这个时候,可以从大厅断开连接。如果不断开,会被自动发回主大厅(任何房间外面)

要查看一个完整的函数列表,以及函数参数,可以参考DependentExtensions\Lobby\LobbyClIEntPC.h

要求的文件:

DependentExtensions\Lobby目录下的所有文件,出列LobbyServer.h LobbyServer.cpp文件

如果你可以使用控制台应用程序,则还需要Samples\LobbyClIEntTest中的所有文件。

By 北洋小郭

转载请注明出处,请勿用于商业用途,谢谢!

总结

以上是内存溢出为你收集整理的一日一点RakNet(38)--Lobby2Client PC全部内容,希望文章能够帮你解决一日一点RakNet(38)--Lobby2Client PC所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1179052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存