【cocos2d-x 仙凡奇緣-網游研發(1) 登錄&注冊】


轉載請注明出處:http://www.cnblogs.com/zisou/p/xianfan01.html

公司的項目總算告一段落了,年前憋到年后,總算要上線了,所以我也有了時間來搞我自己的游戲項目了,和大多數開發者一樣,或許每個做游戲的心里面都有自己的一個世界屬於自己的一個夢,這次我還要繼續做夢,呵呵。

《仙凡奇緣》官方網站

www.xianfancoco.com

好了,下面我贅述一下這個RPG網游的架構,服務器端由socket+http,語言我用c#,因為以前有了一套比較成熟的后台系統附帶了一個tcp通訊協議的輕量級服務監控端。服務端主要還是以HTTP為主,C#的托管機制讓我開發服務器變得相當快捷,相當順當;

有了上圖,大家應該知道了做一個網游不易,一個人恐怕擼不起來。確實,這需要非常多的時間精力,和技術支持;但是我們從簡化,從策划,服務端,客戶端,任何模塊我們都從簡(從簡不等於不做,是少做,而且做精一個就行),畢竟我們有雄心壯志,也難免實現宏偉目標;

回歸這次主要正題:注冊登錄;

服務器端我已經做了提供了如下接口HTTP協議,采用POST協議方式獲取客戶端的消息:

部分核心代碼內容:

 1 if (!IsPostBack)
 2             {
 3                 APIId = Convert.ToInt32(Request.Form["APIId"]);
 4                 switch (APIId)
 5                 {
 6                     //注冊
 7                     case 10000:
 8                         useremail = Request.Form["useremail"];
 9                         pwd = Request.Form["pwd"];
10                         phonenumber = Request.Form["phonenumber"];
11                         username = Request.Form["username"];
12                         returnstring = APIId + "|" + C_user.reguser(useremail, pwd, phonenumber, username) + "|";
13                         break;
14                     //登陸
15                     case 10001:
16                         useremail = Request.Form["useremail"];
17                         pwd = Request.Form["pwd"];
18                         returnstring = APIId+ "|" + C_user.userlogin(useremail, pwd)+ "|" ;
19                         break;
20                     //創建角色
21                     case 10002:
22                         gamename = Request.Form["gamename"];
23                         number = Request.Form["number"];
24                         sex = Request.Form["sex"];
25                         zhiye = Request.Form["zhiye"];
26                         returnstring = APIId + "|" + C_user.reguser_passuserinfo(number,gamename,sex,zhiye) + "|";
27                         break;
28                     default:
29                         returnstring = "數據有誤";
30                         break;
31                 }
32             }
View Code

目前主要開發了:登錄,注冊,和創建角色這三個協議,里面都是POST協議;

客戶端代碼又如何呢?首先我們得有重要的利器(curl)的訪問方式,我建立了HttpWebServer.cpp類,並且進行了封裝;

核心代碼我貼出來:

//回調
size_t HttpWebServer::writehtml(uint8_t* ptr,size_t size,size_t number,void *stream)
{
    CCLog("%s",ptr);
    string reuturndata = (char*)ptr;
    ToDo::showTip(reuturndata);
    return size*number;//這里一定要放回實際返回的字節數
}

string HttpWebServer::getReadyForPostData(CCArray* arraydata)
{
    string datastr = "";
    for (int i = 0; i < arraydata->count(); i++)
    {
        CCString* ccdatastr = (CCString*)arraydata->objectAtIndex(i); 
        if(i==0)
        {
            datastr = ccdatastr->getCString();
        }
        else
        {
            datastr = datastr + "&" + ccdatastr->getCString();
        }
    }
    return datastr;
}

void HttpWebServer::CurlPost(string url,string postdata)
{
    //APIId=10000&useremail=747204@qq.com&pwd=ysj55555&phonenumber=18618169949&username=ysj5555520
    //http://www.xianfancoco.com/AListenAPIweb/userComment.aspx

    CURL *curl;
    CURLcode res;
    std::string cc;
    curl=curl_easy_init();
    if(curl)
    {
        curl_easy_setopt( curl, CURLOPT_URL, url.c_str()); //請求的地址
        curl_easy_setopt(curl, CURLOPT_POST, true); 
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str());
        //啟用POST提交 
        curl_easy_setopt( curl, CURLOPT_FOLLOWLOCATION, 23L); 
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writehtml); //處理的函數
        curl_easy_setopt( curl, CURLOPT_WRITEDATA, &cc);        //緩沖的內存
        res=curl_easy_perform(curl);
        if(res!=CURLE_OK)
        {
            //CCLog("聯網超時 %i",res);
        }
        curl_easy_cleanup(curl);
    }
    else
    {
        //CCLog("curl is null");
        return ;
    }
}
View Code

里面我封裝了如何發送包POST方法和如何組合包的方法,這樣使用起來就會相當的簡便;

如服務器需要傳:useremail = Request.Form["useremail"];
那客戶端也有對應的POST方式,下面就是我如何發送客戶端登錄的請求方式:

CCArray * senddata = CCArray::create();
    string data;
    senddata->addObject(CCString::create("APIId=10001"));
    senddata->addObject(CCString::create("useremail=747204@qq.com"));
    senddata->addObject(CCString::create("pwd=ysj55555"));
    data =  HttpWebServer::getReadyForPostData(senddata);
    HttpWebServer::CurlPost(SERVICES_NAME_USER,data);
    senddata->release();
    TipBaseShowText(this,CCString::create("aaa"),CCString::create("SSS"),1.0f,1.0f,UI_TIP,true);

這樣的封裝將是以后我大量的使用的標本,登錄和注冊是簡單的必要的用戶操作行為,用戶在么有用戶名之前需要點擊注冊;
注冊如下圖:

 

登錄界面如下圖

輸入框,以及登錄或注冊返回

聲明一下這次寫這系列博客主要是為了分享游戲制作經驗,由於這次是個人項目,和公司無關,是否開源還得看游戲3個月以后的情況而定,本游戲所用資源全部來自於商業內部資源;

2014揚帆起航...

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM