152 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.0 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, string appId, string token)
 | |
|         {
 | |
|             var playerEnter = new ClientMessage
 | |
|             {
 | |
|                 PlayerEnter = new PlayerEnter
 | |
|                 {
 | |
|                     RoomId = roomId,
 | |
|                     Uid = uid,
 | |
|                     NickName = nickName,
 | |
|                     Country = country,
 | |
|                     AppId = appId,
 | |
|                     Token = token
 | |
|                 }
 | |
|             };
 | |
|             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, float combo)
 | |
|         {
 | |
|             var message = new ClientMessage
 | |
|             {
 | |
|                 PointFound = new PointFound
 | |
|                 {
 | |
|                     Cid = _cid,
 | |
|                     Level = levelId,
 | |
|                     PointId = pointId,
 | |
|                     Combo = combo
 | |
|                 }
 | |
|             };
 | |
|             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(float timeSpent)
 | |
|         {
 | |
|             var message = new ClientMessage
 | |
|             {
 | |
|                 AllLevelEnd = new AllLevelEnd
 | |
|                 {
 | |
|                     Cid = _cid,
 | |
|                     TimeSpent = timeSpent
 | |
|                 }
 | |
|             };
 | |
|             Send(message);
 | |
|             //Debug.Log("AllLevelEnd message sent");
 | |
|         }
 | |
| 
 | |
|         public void PlayerLeave()
 | |
|         {
 | |
|             var message = new ClientMessage
 | |
|             {
 | |
|                 PlayerLeave = new PlayerLeave
 | |
|                 {
 | |
|                     Cid = _cid
 | |
|                 }
 | |
|             };
 | |
|             Send(message);
 | |
|             //Debug.Log("PlayerLeave message sent");
 | |
|         }
 | |
| 
 | |
|         public void Heartbeat(long timestamp)
 | |
|         {
 | |
|             var message = new ClientMessage
 | |
|             {
 | |
|                 Heartbeat = new Heartbeat
 | |
|                 {
 | |
|                     Timestamp = timestamp
 | |
|                 }
 | |
|             };
 | |
|             Send(message);
 | |
|             //Debug.Log("Heartbeat 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();
 | |
|         }
 | |
|     }
 | |
| } |