unity学习(11)——消息分类处理

学习目标:彻底搞懂游戏内部消息,网络消息和内部消息结构一样,一通百通

1.按照(10)中的方式给注册按钮也完善其所对应的触发函数。实现发送“注册申请”。

public void RegistClick()//登录按钮
{
    //先find,tag的效率更高-给input filed的text添加标签
    TMP_Text a = GameObject.FindWithTag("usernameR").GetComponent(); ;//得到两个Text对象
    TMP_Text b = GameObject.FindWithTag("passwordR").GetComponent(); ;//
    string username = a.text;
    string password = b.text;
    Debug.Log(username);//纯试出来的
    Debug.Log(password);
    //把账号密码放到一个SocketModel中所定义的类中(其实就是一个结构体)
    LoginDTO dto = new LoginDTO();
    dto.userName = username;
    dto.passWord = password;
    string message = Coding.encode(dto);
    //判断是否为空
    if (username != string.Empty && password != string.Empty)
    {
        SocketModel temp = new SocketModel();
        temp.type = 0;
        temp.area = 0;
        temp.command = 2;
        temp.message = message;
        NetWorkScript.getInstance().getList().Add(temp);//加入队列等价于发送消息!
        //不是发送给服务器,而是利用游戏内部的消息机制 
        Debug.Log("发送消息给MessageManager");//注册申请
        NetWorkScript.getInstance().sendMessage(0, 0, 2, message);//这么做主要是为了体验一下unity的消息机制,不能直接用宏名称using不过来
        //NetWorkScript.instance.sendMessage(0, 2, 0, message);
    }
    //这里根据服务器的返回信息确定是否注册成功
    gameObject.SetActive(false);//注册完成后隐藏panel
}

2.完成后登录和注册的消息都会进入 LoginHandler(SocketModel model),再按command进行switch,代码如下:

public void LoginHandler(SocketModel model)//type=LOGIN的都先进这里
{
    Debug.Log("这里是LoginHandler.cs 要read了,读取服务器返回的信息");
    //这里是处理游戏内部消息,update中已经删了
    switch (model.command)
    {
        case LoginProtocol.REG_CREQ://2
        {
                Debug.Log("游戏内部的注册请求,属于自产自销了");//这里应该是可以的
                break;//c#特色
        }
        case LoginProtocol.REG_SRES://3
        {
                Debug.Log("来自服务器的消息,看看注册是否成功了");//这里应该是可以的
                break;//c#特色
        }
    }
}

不要着急写服务器,动手学到现在完成30%的进度,一切都是水到渠成。

你可能感兴趣的:(unity,学习,服务器)