122 lines
3.1 KiB
C#
122 lines
3.1 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(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();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|