游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2252|回复: 0

Unity结合C++开发服务器实现多人游戏(五)

[复制链接]

29

主题

38

帖子

384

积分

中级会员

Rank: 3Rank: 3

积分
384
QQ
发表于 2017-2-22 14:22:54 | 显示全部楼层 |阅读模式
通过数据库判断登陆状态
在此之前进行了假设登陆成功.
  
现在通过RequestLogin连接数据库进行真实登陆后获取结果.
  
  
使用MS SQL Server.大家也可选择使用SQL Server  Express或者Developer Edition. 还可使用 MySQL, AWS Aurora,  RDS 等等..
  
如果对数据库相当熟悉即可略过本节.
  
  
生成DB 实例 "SimpleCharacterMove". 然后建立表格  "GameUser".
  
a.png
b.png
  
为进行测试创建以下记录.
  
c.png
  
输入UserID后, 添加一个stored  procedure读取对应该UserID的信息.
  
   
CREATE PROCEDURE    [dbo].[GetGameUser]
   
@UserID nvarchar(50)
   
AS
   
SELECT * from GameUser where    UserID = @UserID
   
RETURN 0
   
  
现在,RequestLogin远程函数下, 添加调用stored proc的代码. 调用成功的话获取password. 与用户输入的password一致的话 "登陆成功"的远程函数将被调用.
  
   
DEFRMI_Simple_RequestLogin(SimpleServer)
   
{
   
    try
   
    {
   
        CAdoConnection    conn;
   
   
        conn.Open(L"server=.;database=SimpleCharacterMove;trusted_connection=yes",    DbmsType::MsSql);
   
   
        CAdoCommand    cmd;
   
   
        cmd.Prepare(conn,    L"GetGameUser");
   
        cmd.AppendParameter(L"UserID",    ADODB::adVarWChar, ADODB::adParamInput, id.c_str());
   
        CAdoRecordset    rs;
   
        cmd.Execute(rs);
   
   
        String    password2;
   
        if (!rs.GetFieldValue(L"Password",    password2) || password != password2.GetString())
   
        {
   
            m_proxy.NotifyLoginFailed(remote,    RmiContext::ReliableSend, L"Invalid user ID or password");
   
            return true;
   
        }
   
        //    success!
   
        m_proxy.NotifyLoginSuccess(remote,    RmiContext::ReliableSend);
   
    }
   
    catch (AdoException& e)
   
    {
   
        m_proxy.NotifyLoginFailed(remote,    RmiContext::ReliableSend, StringA2T(e.what()).GetString());
   
    }
   
  
假设,服务器与DB网络连接中断的话, 访问DB的函数将出现异常,为防止发生添加了catch功能.
  
现在运行, 按Login键登录界面消失代表登陆成功.必要时,在以上代码添加debug break来观察服务器中都进行了怎样的操作.
  

第六篇:Unity结合C++开发服务器实现多人游戏(六)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 00:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表