专栏首页Golang语言社区社区leaf学习笔记|06. 游戏玩家注册、登陆(中)

社区leaf学习笔记|06. 游戏玩家注册、登陆(中)

微信公众号:Golang语言社区 如有问题或建议,请公众号留言或者微信群、QQ群提问

本节完成以下知识点:

知识1,leaf游戏服务器处理玩家登陆逻辑

知识2,H5客户端实现


上节回顾

上节课已经实现了消息的定义及消息的注册,将Leaf框架的结构做了部分功能文件的添加;更符合后面开发者快速熟悉的文件结构。


leaf游戏服务器处理玩家登陆逻辑

文件位置: server\login\internal\module.go 注:此节不链接MongoDB

module.go

package internal
import (
    "reflect"
    "server/msg/protocolfile"
    "github.com/name5566/leaf/gate"
    "github.com/name5566/leaf/log"
)
func handleMsg(m interface{}, h interface{}) {
    skeleton.RegisterChanRPC(reflect.TypeOf(m), h)
}
func init() {
    // 向当前模块(login 模块)注册 Protocol.UserLogin 消息的消息处理函数 handleTest
    handleMsg(&Protocol.UserLogin{}, handleTest)
}
// 消息处理
func handleTest(args []interface{}) {
    // 收到的 Test 消息
    m := args[0].(*Protocol.UserLogin)
    // 消息的发送者
    a := args[1].(gate.Agent)
    // 1 查询数据库--判断用户是不是合法
    // 2 如果数据库返回查询正确--保存到缓存或者内存
    // 输出收到的消息的内容
    log.Debug("Test login %v", m.LoginName)
    // 给发送者回应一个 Test 消息
    a.WriteMsg(&Protocol.UserLogin{
        LoginName: "client",
    })
}

H5客户端实现

index.html:

<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <h3 style="color: cornflowerblue;">Golang语言社区(www.Golang.Ltd)</h3> 发送数据: <input type='text' id='name' value="Leaf测试">
    <input type="submit" onclick="login()" />
</body>
<script>
    var wsUri = "ws://127.0.0.1:8889/?{'new':3}";
    var json;
    function login() {
        var Data = {
            LoginName: "Golang.Ltd",
            LoginPW: "123456",
        };
        var json = {
            UserLogin:Data
        }
        var goServerJson = JSON.stringify(json);
        wsUri = wsUri;
        console.log(wsUri);
        doSend(goServerJson);
    }
    var output;
    var websocket1;
    function init() {
        output = document.getElementById("output");
        testWebSocket();
    }
    function testWebSocket() {
        console.log(wsUri)
        websocket1 = new WebSocket(wsUri);
        websocket1.onopen = function(evt) {
            onOpen(evt)
        };
        websocket1.onclose = function(evt) {
            onClose(evt)
        };
        websocket1.onmessage = function(evt) {
            onMessage(evt)
        };
        websocket1.onerror = function(evt) {
            onError(evt)
        };
    }
    function onOpen(evt) {
        console.log("CONNECTED");
    }
    function onClose(evt) {
        console.log("DISCONNECTED");
    }
    function onMessage(evt) {
        var data = evt.data;
        console.log("data=" + data);
    }
    function onError(evt) {
        console.log(evt.data);
    }
    function doSend(message) {
        console.log(message);
        websocket1.send(message);
    }
    window.addEventListener("load", init, false);
</script>

页面截图:

简单说明下,H5的部分代码 1 链接端口为什么是8889 ? 原因是我们在leaf架构中配置的是8889 文件位置: server\conf\server.json

server.json

{
    "LogLevel": "debug",
    "LogPath": "",
    "WSAddr": "127.0.0.1:8889",
    "CertFile": "",
    "KeyFile": "",
    "TCPAddr": "127.0.0.1:8888",   
    "MaxConnNum": 20000,
    "ConsolePort": 8012,
    "ProfilePath": ""
}

H5测试链接Leaf服务器

Leaf服务器接到的测试结果:

H5接收到Leaf服务器发回数据测试结果:

本节就到这里,如果有疑问文章留言

本文分享自微信公众号 - Golang语言社区(Golangweb),作者:cserli

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [Go 语言社区]服务器自测JS 工程

    <!DOCTYPE html> <meta charset="utf-8" /> <title>WebSocket Test</title> <sc...

    李海彬
  • JS基础随笔(菜鸟必看篇)

    JavaScript中的数据类型 简单(基本)数据类型:Number、String、Boolean、Undefined、Null 复杂(引用)数据类型: Obj...

    李海彬
  • Golang语言社区--wesocket的demo(包括H5前端,GO后端)

    go代码: package main import ( "flag" "fmt" "glog-master" ...

    李海彬
  • 前端面试题库系列(1)

    // 浏览器解析css选择器的规则是从右向左的,这样会提高查找选择器所对应的元素的效率。

    李才哥
  • 知识总结:四个例子理解闭包//例一//例二//例三//例四

    /** * 闭包原理 * @date   2017-04-10 14:04:17 * @version 1 */ //理解作用域、作用域链 //内部作用域可以通...

    牛客网
  • 前端开发面试题答案(三)

    ECMAScript 2015 新增:Symbol(创建后独一无二且不可变的数据类型 )

    疯狂的技术宅
  • JavaScript异步编程设计快速响应的网络应用

    因为setTimeout回调在while循环结束运行之前不可能被触发! 调用setTimeout时,会有一个延时事件排入队列。然后继续执行下一行代码,直到再...

    奋飛
  • JavaScript异步编程

    平时开发经常会用到js异步编程,由于前端展示页面都是基于网络机顶盒(IPTV的一般性能不太好,OTT较好),目前公司主要采取的异步编程的方式有setTimeou...

    Jack Chen
  • JavaScript闭包与箭头函数

    用户1203875
  • JavaScript语言精粹【语法、对象、函数】

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛

扫码关注云+社区

领取腾讯云代金券