二、Unity3D与SuperSocket开源项目跑得快棋牌游戏-Ping客户端

一、说明

阅读本文前,推荐阅读

  • SuperSocket官方中文文档http://docs.supersocket.net/v1-6/zh-CN
  • SuperSocket ClientEngine使用说明https://github.com/kerryjiang/SuperSocket.ClientEngine

二、客户端工程

runner项目(开源跑得快)
地址:https://139.199.213.123/svn/runner/
用户:runner
密码:abc123
权限:read

二、Unity3D与SuperSocket开源项目跑得快棋牌游戏-Ping客户端_第1张图片
image.png

三、代码示例

  • 本项目使用Unity3D5.4.1
  • 使用SuperSocket ,Unity3D要使用.net 2.0版本
  • 使用SuperSocket头部格式固定并且包含内容长度的协议模版(FixedHeaderReceiveFilter),头部固定两个字节,高字节在前,低字节再后,具体可参考代码
using UnityEngine;
using SuperSocket.ProtoBase;
using System.Text;

public class PingFixedHeaderReceiveFilter : FixedHeaderReceiveFilter {

    public PingFixedHeaderReceiveFilter() : base(2)
    {
    }

    int GetBodyLength(byte[] length)
    {
        return (int)length[0] * 256 + (int)length[1];
    } 

    protected override int GetBodyLengthFromHeader(IBufferStream bufferStream, int length)
    {
        byte[] length1 = new byte[2];
        bufferStream.Read(length1, 0, 2);
        int bodyLength = GetBodyLength(length1);
        return bodyLength;
    }

    public override PingBinaryRequestInfo ResolvePackage(IBufferStream bufferStream)
    {
        byte[] length1 = new byte[2];
        bufferStream.Read(length1, 0, 2);
        int bodyLength = GetBodyLength(length1);

        byte[] data1 = new byte[bodyLength];
        bufferStream.Read(data1, 0, bodyLength);

        PingBinaryRequestInfo requestInfo = new PingBinaryRequestInfo(Encoding.UTF8.GetString(data1), data1);

        return requestInfo;
    }
}
  • 使用EasyClient连接服务器
    void Connect()
    {
        if (null != _easyClient)
        {
            _easyClient.Close();
            _easyClient = null;
        }

        _easyClient = new EasyClient();
        _easyClient.Initialize(new PingFixedHeaderReceiveFilter(), OnReceiveHandler);
        _easyClient.Connected += ConnectedHandler;
        _easyClient.Error += ErrorHandler;
        _easyClient.Closed += ClosedHandler;
        _easyClient.BeginConnect(new DnsEndPoint("120.25.148.37", 9090));
    }
  • 使用EasyClient定时发送数据
    void SendMessage()
    {
        if (null != _easyClient && _easyClient.IsConnected)
        {
            byte[] data1 = Encoding.UTF8.GetBytes("PING");
            byte[] data2 = new byte[] { (byte)(data1.Length / 256), (byte)(data1.Length % 256) };

            byte[] sendData = new byte[data1.Length + data2.Length];
            Array.Copy(data2, 0, sendData, 0, data2.Length);
            Array.Copy(data1, 0, sendData, data2.Length, data1.Length);
            _easyClient.Send(sendData);
           
            _lastSendTime = DateTime.Now;
            Debug.Log("SendMessage _lastSendTime : " + _lastSendTime.Millisecond);
        }

你可能感兴趣的:(二、Unity3D与SuperSocket开源项目跑得快棋牌游戏-Ping客户端)