开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌服务端分析笔记

  新项目需要制作一个微棋游戏,并在网上搜索相关代码。
    
    仅就完整性而言,优林国际象棋卡的开放源代码相对完整(cocos Creator客户端、节点Js服务器、数据库脚本)
    
    实现了房卡麻将的基本功能(热更新、围心登陆共享、游戏回放),下面列出分析说明,希望对后面的人有所借鉴。
    
    但最终,我放弃了从这个代码做二次开发,选择了Golang+mongodb服务器,如果对开发的相关方面感兴趣的朋友也可以添加我作为朋友来讨论。
    
    
    ActudioServer /ActudioServer,JS处理版本获取,帐号注册,登陆
    
    App.GET(‘/GETX版本',函数(REQ,RES));//返回版本信息和游戏大厅连接地址。
    
    App.GET(‘/Cube',函数(REQ,RES)); / /处理访问者登陆
    
    App.GET('/WaChigaAuth',函数(REQ,RES));//处理WeChat登陆
    
    应用程序。获取('/BaseOnFipe,函数(REQ,RES));//Read用户帐户信息主要用于显示用户配置文件
    
    -App.GET('/WeChigaAuth'),函数(REQ,RES);//WebActo登陆
    
    CealTyAuthAudio(帐户、昵称、性别、HeaDiggURL、函数());
    
    
    
    面向HARL服务器/client服务的JS面向客户端HTTP请求
    
    App.GET(‘/Login',函数(REQ,RES));/处理登陆
    
    App.GET('/CuraTyPrimeAudioLoad),函数(REQ,RES);//创建一个房间
    
    App.GET('/StudioPrimeAudioLoo',函数(REQ,RES));//进入房间。
    
    App.GET('/GETPoistyYyList',函数(REQ,RES));//GET游戏历史
    
    App.GET('/GETY-GAMESHOFIOHORE),函数(REQ,RES); / 房间的游戏次数
    
    App.GET('/GETXODELILIOFY游戏,函数(REQ,RES));  /游戏细节,回放播放。
    
    App.GET('/GETHuiSeriStand),函数(REQ,RES); / /获取用户状态钻石的数量。
    
    App.GET('/GET-MIGE},函数(REQ,RES);//GET通知消息
    
    App.GET('/ISSServyOnLoad,函数(REQ,RES));//决定服务器是否在线。
    
    
    
    Hall Server /ROM服务
    
    -App.GET('/RealStursGs,函数(REQ,RES));/游戏服务器注册。
    
    IsServerOnline();//确定服务器是否联机。
    
    Choose Server AndEnter();选择具有最小负载的服务器进入
    
    创建房间();创建房间 / /创建房间
    
    -HTTPGET(ServInFo..IP,ServimoF.HtpPoT,   CealeSyoLo);
    
    客厅();
    
    -HTTPGET(ServInFo.ip,ServimoF.HtpPoT,  /AudioLoo);
    
    
    
    Maigang-Server /App.js读取配置信息并启动相关服务。
    
    //打开HTTP服务
    
    HtpPixServices启动(CONFIG);
    
    /打开外部网络套接字服务
    
    SokTyService启动(CONFIG);
    
    
    
    Maigang-Server /HTTPyServices
    
    应用程序。获取('/GETHyServyFieln',函数(REQ,RES));//获取服务器中的所有房间和用户
    
    -应用程序。获取('/CudioIdHoal',函数(REQ,RES));//Advices请求从大厅创建房间
    
    应用程序。获取('/StudioLoo',函数(REQ,RES));//Advices请求从大厅接收
    
    应用程序。获取(‘/ping',函数(REQ,RES));///OrdServer确定游戏室服务器是否在线。
    
    应用程序。获取('/iSyRoMyRunEng',函数(REQ,RES));//Hall服务器确定游戏室服务器是否在线。
    
    
    
    //心跳到大厅服务器注册游戏服务器。
    
    更新当前服务器上的负载信息(房间数),如果已注册,以便于客户选择最佳房间
    
    功能更新();
    
    HTTPGET(CONT.HARLIPIP,CONT.HARLIPORT,RealStistgs
    
    
    Maigang-Server /SockTyService .js侦听客户端发送的套接字事件。
    
    Socket.on(登录),函数(数据);
    
    Socket.on(准备好,函数(数据));
    
    Socket.on(焕派),函数(数据);
    
    Socket.on(丁克),函数(数据);
    
    Socket.on(楚派),函数(数据);
    
    Socket.on(彭),函数(数据);
    
    Socket.on(刚,函数(数据));
    
    Socket.on(胡),函数(数据);
    
    Socket.on(郭),函数(数据);
    
    Socket.on(聊天),功能(数据);
    
    Socket.on(QuijyChAT),函数(数据);
    
    Socket.on(Voice Smithg),函数(数据);
    
    Socket.on(Enjy',函数(数据));
    
    Socket.on(出口,函数(数据));
    
    Socket.on(凹陷,函数(数据));
    
    Socket.on(DelSOVEL请求,函数(数据));
    
    Socket.on(DoSOVELION),函数(数据);
    
    Socket.on(DoSovil拒绝,函数(数据));
    
    Socket.on(断开,函数(数据));
    
    Socket.on(GAMEMPIN,函数(数据));
    
    
    
    Maigang-Server /ROOMMGR.JS实现与游戏相关的房间操作
    
    函数GeaStudioMid();///随机生成6位ID
    
    FunctionconstructRoomFromDb(DbDATA);/ /从数据库中获取房间信息数据并重建房间。
    
    ExtudioStudio=函数(ROOMID,USEID,用户名,回调);
    
    Exchange。CytReRoMon =函数(创建者,ROOMCONF,GEMS,IP,端口,回调);
    
    ExpStudio.ExtReal=函数(USEID);
    
    销毁=函数(ROOMID);
    
    ExtPosialStudio =函数();
    
    ExtStudio=函数(ROOMID);
    
    ExsS.ISCudio=函数(ROOMID,USEID);
    
    ExtReStay=函数(USER ID,value);
    
    ExpStudio =函数(USERID);
    
    ExtStudio.GuoStudioRe=函数(USER ID);
    
    ExtPv.GETUSEReStab=函数(USER ID);
    
    ExpTest.GETUsRealStices =函数();
    
    MAGangangServer/GAMEMEGRXXZD.JS//麻将游戏的通用实现
    
    函数GETMJType(ID);
    
    功能洗牌(游戏);
    
    Functionmopai(游戏,SeaDe指标);
    
     /检查它是否可以被触摸。
    
    FunctioncheckCanPeng(游戏,SEATDATA,TAGPAI);
    
    /检查是否可以单击该栏。
    
    功能检查CIDIANGANG(游戏,SEATDATA,TAGPAI);
    
    /检查隐藏条是否可以隐藏。
    
    FunctioncheckCanAnGang(游戏,SEATDATA);
    
     /检查你是否能弯曲杆(当你触摸它)。
    
    FunctioncheckCanWanGang(游戏,SEATDATA);
    
    FunctioncheckCanHu(游戏,SEATDATA,TAGPAI);
    
    功能清除选项(游戏,SEATDATA);
    
    /检查听力卡。
    
    FunctioncheckCanTingPai(游戏,SEATDATA);
    
    函数索引(USEID);
    
    FunctiongetGameByUserID(USERID);
    
    功能操作(SEATDATA);
    
    功能终端操作(游戏,SEATDATA,拜县);
    
    FunctionmoveToNextUser(游戏,NeXeSt));
    
    游戏功能(游戏);
    
    FunctionisSameType(类型,ARR);
    
    FunctionisQingYiSe(GAMESEATDATA);
    
    官能清清(GAMESEATDATA);
    
    FunctionisZhongZhang(GAMESEATDATA);
    
    FunctionisJiangDui(GAMESEATDATA);
    
    泛函(SEATDATA);
    
    函数计算器(游戏,风扇);
    
    FunctionfindMaxFanTingPai(TS);
    
    功能发现播放器(游戏);
    
    函数计算器(游戏,ROMOMIVER);
    
    功能转换(游戏,用户ID,强制结束);
    
    函数记录操作(游戏,SEATDATA,类型,目标);
    
    Exvest.Stase=函数(ROOMID);/启动一个新的局。
    
    ExpU.S.CUPAI =函数(USEID,拜县);
    
    ExpP.PU=函数(USERID);
    
    ExpS.ISPLAY =函数(USER ID);
    
    FunctiondoGang(游戏,转座,SEATDATA,GANTYPE,NUMTFCNT,拜县));
    
    Eng=函数(USEID,拜县);
    
    Hux= HU=函数(USERID);
    
    出口=功能(用户ID);
    
    Exdos.doDeSt=函数(ROOMID);
    
    
    
    Maigang-Server /MJUTULLS.JS//麻将相关辅助功能
    
    FunctioncheckTingPai(SEATDATA,开始,结束);
    
    FunctionmatchSingle(SEATDATA,选定);
    
    FunctioncheckSingle(SEATDATA);
    
    FunctioncheckCanHu(SEATDATA);
    
    ExpTest.GETMJType =函数(PAI);
    
    
    
    Maigang-Server /UrMGR.js/Band用户和Socket,发送消息
    
    EXBET.BAND=函数(USER ID,Socket);
    
    Del=函数(USER ID,Socket);
    
    ExpS.GET=函数(USERID);
    
    ExpS.ISNoL=函数(USERID);
    
    ExtP.GETONLIN EncEnter =函数();
    
    ExpS.sEnsMg=函数(USEID、事件、MSGDATA);
    
    SOCKE.EMIT(事件,MSGDATA);
    
    出口:功能(ROOMID);
    
    ExpRest.BrasaStudioal=函数(事件、数据、发送者、包括发送者);
    
    SOCKE.EMIT(事件,MSGDATA);
    
    
    
    ma._server/tokenmgr.js/Token相关操作令牌的设计用于检查在进入房间期间是否发生超时。
    
    ExpS.CRATATETKEN =函数(USER ID,生存期);//获取游戏室的信息并创建令牌。
    
    ExtPv.GETToMeNe=函数(USER ID);
    
    ExpTest.GETUSERID=函数(令牌);
    
    Exist.SistOnEngule=函数(令牌);/当游戏服务器连接时,检查有效和超时吗
    
    Extest.DelToMeC=函数(令牌);
    
    App.GET('/StudioHoo');
    
    RoomMgr.enterRoom(ROMID,USEID,名称,函数(RET){
    
    ToKMGR.CRATATETKEN(USEID,5000);
    
    C.Vv.GAMEnETMG.CelpToMeServer(RET);/Client
    
    VaR SD= {{
    
    令牌:数据令牌,
    
    Roomid:Da.RooMID,
    
    时间:数据时间,
    
    符号:数据符号,
    
    };
    
    Cc.vv.net.send(登录
    
    
    
    /Server
    
    Socket.on(登录),函数(数据){
    
    /检查令牌是否有效。
    
    如果(TokMgR.istoEnnValm(令牌)=false){
    
    SOCKE.EMIT('LogiNoRebug),{ErrCoC:3,ErrMSG:TokOutOutof To.};
    
    返回;
    
    }
    
    }
    
    具体过程分析
    
    注册游戏服务器
    
    Maigang-Server /HTTPyServices
    
    /初始化房间。服务器地址为空。
    
    Servip=;
    
    
    
    GAMESSVERIN Foo.Load=ROOMMGR.GETToMoCuffes();
    
    HTTPGET(Halip IP,HaliPurt,RealStistGGS)
    
    //当注册服务器成功时,设置房间以将IP连接到此服务器IP。
    
    Servip=DATA IP;
    
    }
    
    
    Hall Server /ROM服务
    
    App.GET('/RealStursGs),函数(REQ,RES){
    
    Hall Server /ROM服务
    
    App.GET('/RealStursGs),函数(REQ,RES){
    
    /服务器已注册。
    
    如果(ServMAP {ID}){
    
    /更新服务器负载信息
    
    信息=负载=负载;
    
    Http.send(0岁),好
    
    返回;
    
    }
    
    /保存服务器信息到服务器阵列
    
    ServMMAP{ID}= {
    
    IP:
    
    身份证:
    
    CyclipP: CclitPp,
    
    客户端:
    
    HttpPort:
    
    负载:负载
    
    };
    
    }
    
    输入房间服务器选择
    
    函数选择器(){
    
    ValServer信息= NULL;
    
    /选择服务器列表中最少的房间数。
    
    对于(在服务器映射中的var){
    
    VaR信息= ServMAP {S};
    
    如果(ServEnvices==null){
    
    服务器信息=信息;
    
    }
    
    否则{
    
    如果(ServInFo.Load > iNo.Load){
    
    服务器信息=信息;
    
    }
    
    }
    
    }
    
    返回服务器信息;
    
    }
    
    创建房间并进入房间流动
    
    Hall/clitnService
    
    创建一个房间
    
    App.GET('/CuraTyPrimeAudioLoo');
    
    办公用品();
    
    房间();
    
    
    
    加入房间
    
    App.GET('/Studio PrimeAudioLoo');
    
    房间();
    
    Hall/RoMyService
    
    ExtudioStudio=函数(用户ID、名称、ROMID、FNCALBACK){
    
    //Hall服务器将HTTP请求传递给游戏服务器。
    
    HTTPGET(ServInFo.ip,ServimoF.HtpPoT,  /StudioLoo);
    
    }
    
    Maigang-Server /HTTPyServices
    
    App.GET('/StudioLoo');
    
    RoMMGR.Engern();

猜你喜欢

转载自www.cnblogs.com/h5qipaiyuanma/p/9779531.html