| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  | 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; | 
					
						
							| 
									
										
										
										
											2023-09-04 06:06:38 +00:00
										 |  |  |         private MemoryStream _localSendMs = new MemoryStream(1024 * 1024 * 1); | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         /// <summary> | 
					
						
							|  |  |  |         /// 设置 kcp 客户端,用于发送消息 | 
					
						
							|  |  |  |         /// </summary> | 
					
						
							|  |  |  |         public Ukcp Client | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             set => _client = value; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /// <summary> | 
					
						
							|  |  |  |         /// 当收到服务端发来的 PlayerEntered 事件时,设置房间中的玩家编号  | 
					
						
							|  |  |  |         /// </summary> | 
					
						
							|  |  |  |         public long Cid | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             set => _cid = value; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |         public void PlayerEnter(string roomId, string uid, string nickName, string country, string appId, string token) | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         { | 
					
						
							|  |  |  |             var playerEnter = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 PlayerEnter = new PlayerEnter | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     RoomId = roomId, | 
					
						
							|  |  |  |                     Uid = uid, | 
					
						
							|  |  |  |                     NickName = nickName, | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |                     Country = country, | 
					
						
							|  |  |  |                     AppId = appId, | 
					
						
							|  |  |  |                     Token = token | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(playerEnter); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("PlayerEnter message sent"); | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public void LevelPrepared(string levelId) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             var message = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 LevelPrepared = new LevelPrepared | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     Cid = _cid, | 
					
						
							|  |  |  |                     Level = levelId | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(message); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("LevelPrepared message sent"); | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |         public void PointFound(string levelId, int pointId, float combo) | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         { | 
					
						
							|  |  |  |             var message = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 PointFound = new PointFound | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     Cid = _cid, | 
					
						
							|  |  |  |                     Level = levelId, | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |                     PointId = pointId, | 
					
						
							|  |  |  |                     Combo = combo | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(message); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("PointFound message sent"); | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         public void LevelEnd(string levelId) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             var message = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 LevelEnd = new LevelEnd | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     Cid = _cid, | 
					
						
							|  |  |  |                     Level = levelId | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(message); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("LevelEnd message sent"); | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |         public void AllLevelEnd(float timeSpent) | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         { | 
					
						
							|  |  |  |             var message = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 AllLevelEnd = new AllLevelEnd | 
					
						
							|  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |                     Cid = _cid, | 
					
						
							|  |  |  |                     TimeSpent = timeSpent | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(message); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("AllLevelEnd message sent"); | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-09-21 02:34:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         public void PlayerLeave() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             var message = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 PlayerLeave = new PlayerLeave | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     Cid = _cid | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(message); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("PlayerLeave message sent"); | 
					
						
							| 
									
										
										
										
											2023-09-21 02:34:54 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |         public void Heartbeat(long timestamp) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             var message = new ClientMessage | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 Heartbeat = new Heartbeat | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     Timestamp = timestamp | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             Send(message); | 
					
						
							| 
									
										
										
										
											2023-10-18 02:17:44 +00:00
										 |  |  |             //Debug.Log("Heartbeat message sent"); | 
					
						
							| 
									
										
										
										
											2023-09-15 10:23:02 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-08-30 12:26:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |