upm_guru_dof_lib/Runtime/MessageSender.cs

152 lines
4.0 KiB
C#
Raw Normal View History

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