122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
using Dof;
 | 
						|
using dotNetty_kcp;
 | 
						|
using DotNetty.Buffers;
 | 
						|
using UnityEngine;
 | 
						|
using System.IO;
 | 
						|
using base_kcp;
 | 
						|
using Guru;
 | 
						|
 | 
						|
namespace DofLibrary
 | 
						|
{
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// 游戏消息发送接口实现类
 | 
						|
    /// </summary>
 | 
						|
    internal class MessageSender : IMessageSender
 | 
						|
    {
 | 
						|
        private long _cid;
 | 
						|
        private Ukcp _client;
 | 
						|
        private MemoryStream _localSendMs = new MemoryStream(1024 * 1024 * 1);
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 设置 kcp 客户端,用于发送消息
 | 
						|
        /// </summary>
 | 
						|
        public Ukcp Client
 | 
						|
        {
 | 
						|
            set => _client = value;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 当收到服务端发来的 PlayerEntered 事件时,设置房间中的玩家编号 
 | 
						|
        /// </summary>
 | 
						|
        public long Cid
 | 
						|
        {
 | 
						|
            set => _cid = value;
 | 
						|
        }
 | 
						|
 | 
						|
        public void PlayerEnter(string roomId, string uid, string nickName, string country)
 | 
						|
        {
 | 
						|
            var playerEnter = new ClientMessage
 | 
						|
            {
 | 
						|
                PlayerEnter = new PlayerEnter
 | 
						|
                {
 | 
						|
                    RoomId = roomId,
 | 
						|
                    Uid = uid,
 | 
						|
                    NickName = nickName,
 | 
						|
                    Country = country
 | 
						|
                }
 | 
						|
            };
 | 
						|
            Send(playerEnter);
 | 
						|
            Debug.Log("PlayerEnter message sent");
 | 
						|
        }
 | 
						|
 | 
						|
        public void LevelPrepared(string levelId)
 | 
						|
        {
 | 
						|
            var message = new ClientMessage
 | 
						|
            {
 | 
						|
                LevelPrepared = new LevelPrepared
 | 
						|
                {
 | 
						|
                    Cid = _cid,
 | 
						|
                    Level = levelId
 | 
						|
                }
 | 
						|
            };
 | 
						|
            Send(message);
 | 
						|
            Debug.Log("LevelPrepared message sent");
 | 
						|
        }
 | 
						|
 | 
						|
        public void PointFound(string levelId, int pointId)
 | 
						|
        {
 | 
						|
            var message = new ClientMessage
 | 
						|
            {
 | 
						|
                PointFound = new PointFound
 | 
						|
                {
 | 
						|
                    Cid = _cid,
 | 
						|
                    Level = levelId,
 | 
						|
                    PointId = pointId
 | 
						|
                }
 | 
						|
            };
 | 
						|
            Send(message);
 | 
						|
            Debug.Log("PointFound message sent");
 | 
						|
        }
 | 
						|
 | 
						|
        public void LevelEnd(string levelId)
 | 
						|
        {
 | 
						|
            var message = new ClientMessage
 | 
						|
            {
 | 
						|
                LevelEnd = new LevelEnd
 | 
						|
                {
 | 
						|
                    Cid = _cid,
 | 
						|
                    Level = levelId
 | 
						|
                }
 | 
						|
            };
 | 
						|
            Send(message);
 | 
						|
            Debug.Log("LevelEnd message sent");
 | 
						|
        }
 | 
						|
 | 
						|
        public void AllLevelEnd()
 | 
						|
        {
 | 
						|
            var message = new ClientMessage
 | 
						|
            {
 | 
						|
                AllLevelEnd = new AllLevelEnd
 | 
						|
                {
 | 
						|
                    Cid = _cid
 | 
						|
                }
 | 
						|
            };
 | 
						|
            Send(message);
 | 
						|
            Debug.Log("AllLevelEnd message sent");
 | 
						|
        }
 | 
						|
 | 
						|
        private void Send(ClientMessage message)
 | 
						|
        {
 | 
						|
            _localSendMs.SetLength(0);
 | 
						|
            _localSendMs.Position = 0;
 | 
						|
 | 
						|
            ProtobufHelper.ToStream(message, _localSendMs);
 | 
						|
 | 
						|
            var dataBuf = Unpooled.DirectBuffer(1024 * 1024 * 1);
 | 
						|
            dataBuf.WriteBytes(_localSendMs.GetBuffer(), 0, (int)_localSendMs.Length);
 | 
						|
            _client.write(dataBuf);
 | 
						|
            dataBuf.Release();
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |