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