您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页二、Unity3D与SuperSocket开源项目跑得快棋牌游戏

二、Unity3D与SuperSocket开源项目跑得快棋牌游戏

来源:二三娱乐

一、说明

阅读本文前,推荐阅读

  • SuperSocket官方中文文档
  • SuperSocket ClientEngine使用说明

二、客户端工程

  • 项目下载,密码RjKzWr
  • 本项目使用Unity3D5.4.1
  • 使用SuperSocket 2.0版本
  • 复制SuperSocket.ClientEngine.dll,SuperSocket.ProtoBase.dll到Unity3D工程Plugins目录下
  • 使用SuperSocket头部格式固定并且包含内容长度的协议模版(FixedHeaderReceiveFilter),头部固定两个字节,高字节在前,低字节再后,具体可参考代码
using UnityEngine;
using SuperSocket.ProtoBase;
using System.Text;

public class PingFixedHeaderReceiveFilter : FixedHeaderReceiveFilter<PingBinaryRequestInfo> {

    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);
        }

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务