一日一点RakNet(40)--Lobby2Client-PS3

Lobby2Client_360插件概览

 

NP系统的接口,包括信号

       PS3 NP系统提供了房间和大厅的概念。Sony也使用NAT穿透架起了自己的主机服务器。通过使用Lobby2Client_PS3插件,这些服务以RakNet接口的方式提供给用户使用。

       例子位于np_matching2_lobby工程下的RakNet_PS3_VS2005解决方案下。这个例子是使用了PS3 SDKnp_matching2例子,但是修改成了RakNet接口调用形式。如果你仔细看Lobby2Client_PS3.cppLobby2Message_PS3.cpp的源代码,你会看到例子中使用的代码中其大部分的代码是相同的。这保证了与PS3 TCRs的一致性。

 

使用:

       Lobby2Client_PC3实例附加到RakPeer实例。大部分的操作是通过SendMessage()方法和SendMsgAndDealloc()方法来执行,类也包含了一些功能函数。例如,IsInRoom()返回你当前是否位于房间内。GetNumFriends()方法返回在线好友数。参考类的方法的完整列表。

       可用的操作方法可以在Lobby2Message_PS3.h文件中查看。这些操作的文档是在文件中做了详细陈述。参考文件的底部的操作完整列表。

      

需要的文件:

       DependentExtensions\Lobby2目录下的所有文件,除了Lobby2Server.hLobby2Server.cpp。这些是所有平台都需要的共有文件。

       DependentExtension\Lobby2\ps3目录下的所有文件。这些文件是针对PS3的。Smaples\Lobby2Client_PS3\np_matching2\np_maching2_lobby\np_conf.*

 

例子代码:

初始化RakNet:

       RakNet::Lobby2Message* startupMsg = messageFactory->Alloc(RakNet::L2MID_Client_Login);
       ((RakNet::Client_Login_PS3*) startupMsg)->cellSysutilRegisterCallback_slot = 3;
       ((RakNet::Client_Login_PS3*) startupMsg)->npCommId = NpConf::npCommId();

       ((RakNet::Client_Login_PS3*) startupMsg)->npCommPassphrase = NpConf::npCommPassphrase();

       lobby2Client->SendMessage(startupMsg);

       if (startupMsg->resultCode != RakNet::L2RC_PROCESSING && startupMsg->resultCode != RakNet::L2RC_SUCCESS)

              printf("PS3 Login failed.\n");

       messageFactory->Dealloc(startupMsg);

 

附加插件,注册回调

       struct PS3Results : public RakNet::Lobby2Callbacks
       {
              // ...
       } ps3Results;

       // 附加插件,注册回调

       messageFactory = new RakNet::Lobby2MessageFactory_PS3;

       lobby2Client = new RakNet::Lobby2Client_PS3();

       lobby2Client->AddCallbackInterface(&ps3Results);

       lobby2Client->SetMessageFactory(messageFactory);

       rakPeer->AttachPlugin(lobby2Client);

        

登陆:

       RakNet::Lobby2Message* startupMsg = messageFactory->Alloc(RakNet::L2MID_Client_Login);

       ((RakNet::Client_Login_PS3*) startupMsg)->cellSysutilRegisterCallback_slot = 3;

       ((RakNet::Client_Login_PS3*) startupMsg)->npCommId = NpConf::npCommId();

       ((RakNet::Client_Login_PS3*) startupMsg)->npCommPassphrase = NpConf::npCommPassphrase();

       lobby2Client->SendMessage(startupMsg);

       if (startupMsg->resultCode != RakNet::L2RC_PROCESSING && startupMsg->resultCode != RakNet::L2RC_SUCCESS)

       {

              printf("PS3 Login failed.\n");

       }

       messageFactory->Dealloc(startupMsg);

 

读取异步登陆结果:

       // 使用这些代码更新PS3Results

       struct PS3Results : public RakNet::Lobby2Callbacks

       {

              virtual void MessageResult(RakNet::Client_Login *message)

              {

                     if (message->resultCode == RakNet::L2RC_Client_Login_CANCELLED)

                     {

                            printf("L2RC_Client_Login_CANCELLED");

                     }

                     else if (message->resultCode == RakNet::L2RC_Client_Login_CABLE_NOT_CONNECTED)

                     {

                            printf("L2RC_Client_Login_CABLE_NOT_CONNECTED");

                     }

                     else if (message->resultCode == RakNet::L2RC_Client_Login_NET_NOT_CONNECTED)
                     {

                            printf("L2RC_Client_Login_NET_NOT_CONNECTED");

                     }

                     else if (message->resultCode != RakNet::L2RC_SUCCESS)
                     {

                            printf("An error has occurred while unloading NetStartDialog.");

                     }

                     else

                     {

                            //Success

                            printf("Login Success");

                     }

              }

       } ps3Results;

 

重要:

       1. 使用这个系统,在发送Client_Login消息之前,需要启动RakNet。此外,在传递给Startup()方法SocketDescriptor参数中,要指定remotePortRakNetWasStartedOn_PS3。如果所有的系统从一个相同端口启动,那么SocketDescriptor::remotePortRakNetWasStartedOn_PS3应该等于SocketDescriptor::port

       2. RakNet没有运行时,需要手动调用Lobby2Client_PS3::Update()方法,否则回调函数不会被调用。

 

By 北洋小郭

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值