Torquescript学习笔记:与mysql数据库通信

本文介绍了一种在TorqueScript中实现与MySQL数据库交互的方法,通过自定义MySQL类完成数据库连接、查询及数据操作等功能,并展示了具体实现的脚本代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
Torquescript本身不带与数据库操作的功能,要想实现需要修改引擎内部代码,本人从garagegame的论坛上下载了torque与mysql数据库操作的源码,它提供了一个MySQL 类,能方便地与mysql数据库操作:
脚本如下:
$MYSQL::MYSQL_DB;
function MySQL()
{
    %mysql=new MySQL();
    %mysql.host="192.168.0.77";       // default: "localhost"
    %mysql.port=3306;          // default: 3306
    %mysql.user="root";     // No default
    %mysql.pwd="root";         // default: ""
    %mysql.flag_compress=false;    // default: false
    %mysql.flag_ssl=false;     // default: false
    %mysql.db="menagerie";         // No default
    %mysql.ValidateSettings();      // optional
    %mysql.Connect();
    %mysql.Query ("SELECT * FROM tblUser");
    %result=%mysql.StoreResult();
 
    for (%i=0; %i<%mysql.NumRows (%result); %i++)
    {
       %mysql.FetchRow (%result);
 
       %userid=%mysql.GetRowCell (%result, "userid");
       %username=%mysql.GetRowCell (%result, "username");
       %pwd=%mysql.GetRowCell(%result, "password");
       echo (%userid, " --- ", %username);
    }
 
    %mysql.FreeResult (%result);
   
    %sqlInsert="Insert into tbluser values('liang','lsl','world')";
    %mysql.Query(%sqlInsert);
    %result=%mysql.StoreResult();
    %mysql.Close();
}
////////////////////////////////////////////////////
function OpenMySQLDB()
{
    $MYSQL::MYSQL_DB=new MySQL();
    $MYSQL::MYSQL_DB.host="192.168.0.77";    // default: "localhost"
    $MYSQL::MYSQL_DB.port=3306;           // default: 3306
    $MYSQL::MYSQL_DB.user="root";     // No default
    $MYSQL::MYSQL_DB.pwd="root";          // default: ""
    $MYSQL::MYSQL_DB.flag_compress=false; // default: false
    $MYSQL::MYSQL_DB.flag_ssl=false;      // default: false
    $MYSQL::MYSQL_DB.db="menagerie";         // No default
    $MYSQL::MYSQL_DB.ValidateSettings();      // optional
    $MYSQL::MYSQL_DB.Connect();
}
function CloseMySQLDB()
{
    $MYSQL::MYSQL_DB.Close();
}
function OperateMySQLDB(%sql, %flag)
{
    $MYSQL::MYSQL_DB.Query (%sql);
    %result=$MYSQL::MYSQL_DB.StoreResult();
 
    if(%flag)
    {
       for (%i=0; %i<%mysql.NumRows (%result); %i++)
       {
           $MYSQL::MYSQL_DB.FetchRow (%result);
           %userid=$MYSQL::MYSQL_DB.GetRowCell (%result, "userid");
           %username=$MYSQL::MYSQL_DB.GetRowCell (%result, "username");
           %pwd=$MYSQL::MYSQL_DB.GetRowCell(%result, "password");
       }
    }
    $MYSQL::MYSQL_DB.FreeResult (%result);
}
与数据库连接的代码被放在common模块中,在 server端,建立一个TCPObject对象,用于监听客户端的消息,在接收到客户端的连接后创建TCPObject对象返回给客户端,以此实现通信,客户端会按照一定的协议发送消息到服务器端,服务器根据发来的消息实现与数据库的各种操作。
function initChatServer()
{
   new TCPObject(chatConnection);
   chatConnection.listen(20010);
   echo("Listening for new connections on port 20010");
   $PollTime=60; // time, in minutes, between checks to see if the server
   echo("Sechedule set");
}
function chatConnection::onConnectRequest(%this, %address, %id)
{
    %client=new TCPObject(chatClient, %id);
    echo("conn_hand"@%client);
    %i= findOpenClientSlot();
    $clients[%i,"clientID"] =%client;
    $clients[%i,"clientNickname"] ="Guest";
    $clients[%i,"connected"] =true;
    OpenMySQLDB();
}
function chatClient::processLine(%this, %line, %id)
{
    %posSep=strpos(%line, ":");
    if (%posSep==0)
       return;
    %len=strlen(%line);
    %command=getSubStr(%line, 0, %posSep); //?
    %argument=getSubStr(%line, %posSep+1, %len-%posSep+1); //?¨°
    %nickname= getClientNickname(%id);
    %i= findClientRecord(%id);
    // This is the string form of the switch/case command
    switch$ (%command)
    {
         case"create_account":
         %pos1= strpos(%line,",");
         %pos2= strpos(%line,",",%pos1+1);
        if (%pos1==0)
            return;
        %user=getsubstr(%line,%possep+1,%pos1-%posSep-1);
         %pass=getsubstr(%line,%pos1+1,%pos2-%pos1-1);
        %name=getsubstr(%line,%pos2+1,%len-%pos2+1);
%result= create_account(%user,%pass,%name);
%id.send("send:create_ok/n");
}
}
在client端,代码如下:
function chatConnect(%server, %port, %nick)
{
    %address=%server@":"@%port;
    // create a new TCPObject for our network code
    new TCPObject(chatConnection);
    // attempt to connect to the server
    chatConnection.connect(%address);
    // flag us as not connected at this point
    $connected=false;
    // save our nickname
    $nickname=%nick;
}
function chatLogin()
{
  
   if ($nickname$="")
   {
      %id=getRealTime() /1000/60;
      $nickname="Guest"@%id;
   }
  // send the login command to the server     
    chatConnection.send("login:"@$nickname@"/n");   
}
 
function client_login(%log_id,%password) //freeman
{
 chatconnection.send("login_server:"@%log_id@","@%password@"/n");
}
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值