Compare commits
22 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
7f3921b163 | |
|
|
a885a394c0 | |
|
|
40d8710f37 | |
|
|
e4d89d821a | |
|
|
82a635ffa2 | |
|
|
da8167162a | |
|
|
cd0c8ca54d | |
|
|
cceee2b05a | |
|
|
a6cd2af2d0 | |
|
|
8aaf25d998 | |
|
|
76c8a3dc9a | |
|
|
33dd76ac5d | |
|
|
fbbe434809 | |
|
|
5f06a17ee3 | |
|
|
f217a3ad6c | |
|
|
9a791a0402 | |
|
|
099cccd2fb | |
|
|
3b195db157 | |
|
|
d5ca66eda0 | |
|
|
2453fd8879 | |
|
|
0e708068ea | |
|
|
38ae58424d |
|
|
@ -2,7 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Guru
|
||||
namespace DofLibrary
|
||||
{
|
||||
|
||||
public class GameEventMgr
|
||||
|
|
|
|||
|
|
@ -13,11 +13,13 @@ namespace DofLibrary
|
|||
public class GameKcpClient : KcpListener
|
||||
{
|
||||
public Action OnConnected;
|
||||
public Action OnDisConnected;
|
||||
|
||||
private KcpClient _kcpClient;
|
||||
public IMessageSender sender { get; private set; } = new MessageSender();
|
||||
private IMessageReceiver _receiver;
|
||||
private bool _running;
|
||||
private int? _timeoutMillis;
|
||||
|
||||
public GameKcpClient(DotNetty.Unity.Level level = DotNetty.Unity.Level.ALL)
|
||||
{
|
||||
|
|
@ -53,7 +55,8 @@ namespace DofLibrary
|
|||
channelConfig.Crc32Check = false;
|
||||
channelConfig.UseConvChannel = true;
|
||||
//channelConfig.Conv = UnityEngine.Random.Range(1, int.MaxValue);
|
||||
channelConfig.TimeoutMillis = 10000;
|
||||
if(_timeoutMillis.HasValue)
|
||||
channelConfig.TimeoutMillis = _timeoutMillis.Value;
|
||||
|
||||
_kcpClient = new KcpClient();
|
||||
_kcpClient.init(channelConfig);
|
||||
|
|
@ -67,7 +70,7 @@ namespace DofLibrary
|
|||
|
||||
private void ProcessMessage(ServerMessage serverMessage)
|
||||
{
|
||||
Debug.Log("[ProcessMessage]");
|
||||
//Debug.Log("[ProcessMessage]");
|
||||
if (serverMessage.PlayerEntered != null)
|
||||
{
|
||||
//Debug.Log("[ProcessMessage]PlayerEntered");
|
||||
|
|
@ -95,6 +98,11 @@ namespace DofLibrary
|
|||
//Debug.Log("[ProcessMessage]GameFinish");
|
||||
_receiver.OnGameFinish(serverMessage.GameFinish);
|
||||
}
|
||||
else if (serverMessage.Heartbeat != null)
|
||||
{
|
||||
//Debug.Log("[ProcessMessage]Heartbeat");
|
||||
_receiver.OnHeartbeat(serverMessage.Heartbeat);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -108,7 +116,7 @@ namespace DofLibrary
|
|||
|
||||
if (OnConnected != null)
|
||||
{
|
||||
Loom.QueueOnMainThread(() =>
|
||||
LoomUtil.QueueOnMainThread(() =>
|
||||
{
|
||||
OnConnected.Invoke();
|
||||
});
|
||||
|
|
@ -131,7 +139,7 @@ namespace DofLibrary
|
|||
|
||||
if (msg is ServerMessage server_msg)
|
||||
{
|
||||
Loom.QueueOnMainThread(() =>
|
||||
LoomUtil.QueueOnMainThread(() =>
|
||||
{
|
||||
ProcessMessage(server_msg);
|
||||
});
|
||||
|
|
@ -159,8 +167,20 @@ namespace DofLibrary
|
|||
public void handleClose(Ukcp ukcp)
|
||||
{
|
||||
Debug.Log("[GameKcpClient]: Connection closed");
|
||||
if (OnDisConnected != null)
|
||||
{
|
||||
LoomUtil.QueueOnMainThread(() =>
|
||||
{
|
||||
OnDisConnected.Invoke();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void setTimeoutMillis(int timeoutMillis)
|
||||
{
|
||||
_timeoutMillis = timeoutMillis;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭 Client,应该在游戏结束时调用
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -41,5 +41,10 @@ namespace DofLibrary
|
|||
/// </summary>
|
||||
/// <param name="gameFinish">两个玩家的得分</param>
|
||||
void OnGameFinish(GameFinish gameFinish);
|
||||
|
||||
/// <summary>
|
||||
/// 心跳包
|
||||
/// </summary>
|
||||
void OnHeartbeat(Heartbeat heartbeat);
|
||||
}
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ namespace DofLibrary
|
|||
/// <param name="uid">玩家ID</param>
|
||||
/// <param name="nickName">玩家昵称</param>
|
||||
/// <param name="country">玩家国家</param>
|
||||
void PlayerEnter(string roomId, string uid, string nickName, string country);
|
||||
void PlayerEnter(string roomId, string uid, string nickName, string country, string appId, string token);
|
||||
|
||||
/// <summary>
|
||||
/// 发送 LevelPrepared 关卡准备完毕 消息
|
||||
|
|
@ -43,7 +43,7 @@ namespace DofLibrary
|
|||
/// </summary>
|
||||
/// <param name="levelId">当前关卡ID</param>
|
||||
/// <param name="pointId">点位编号</param>
|
||||
void PointFound(string levelId, int pointId);
|
||||
void PointFound(string levelId, int pointId, float combo);
|
||||
|
||||
/// <summary>
|
||||
/// 发送 LevelEnd 关卡结束 消息
|
||||
|
|
@ -54,6 +54,16 @@ namespace DofLibrary
|
|||
/// <summary>
|
||||
/// 发送 AllLevelEnd 所有关卡结束 消息
|
||||
/// </summary>
|
||||
void AllLevelEnd();
|
||||
void AllLevelEnd(float timeSpent);
|
||||
|
||||
/// <summary>
|
||||
/// 发送 玩家中途离开房间 消息
|
||||
/// </summary>
|
||||
void PlayerLeave();
|
||||
|
||||
/// <summary>
|
||||
/// 发送心跳包
|
||||
/// </summary>
|
||||
void Heartbeat(long timestamp);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,17 +3,17 @@ using System.Collections.Generic;
|
|||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Guru
|
||||
namespace DofLibrary
|
||||
{
|
||||
// Loom lets you easily run code on another thread and have that other thread run code on the main game thread when it needs to.
|
||||
public class Loom : MonoBehaviour
|
||||
public class LoomUtil : MonoBehaviour
|
||||
{
|
||||
public static int maxThreads = 10;
|
||||
|
||||
private static int numThreads;
|
||||
private static Loom _instance;
|
||||
private static LoomUtil _instance;
|
||||
|
||||
public static Loom Instance
|
||||
public static LoomUtil Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -39,7 +39,7 @@ namespace Guru
|
|||
initialized = true;
|
||||
var g = new GameObject("Loom");
|
||||
DontDestroyOnLoad(g);
|
||||
_instance = g.AddComponent<Loom>();
|
||||
_instance = g.AddComponent<LoomUtil>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ namespace DofLibrary
|
|||
}
|
||||
};
|
||||
Send(playerEnter);
|
||||
Debug.Log("PlayerEnter message sent");
|
||||
//Debug.Log("PlayerEnter message sent");
|
||||
}
|
||||
|
||||
public void LevelPrepared(string levelId)
|
||||
|
|
@ -63,7 +63,7 @@ namespace DofLibrary
|
|||
}
|
||||
};
|
||||
Send(message);
|
||||
Debug.Log("LevelPrepared message sent");
|
||||
//Debug.Log("LevelPrepared message sent");
|
||||
}
|
||||
|
||||
public void PointFound(string levelId, int pointId, float combo)
|
||||
|
|
@ -79,7 +79,7 @@ namespace DofLibrary
|
|||
}
|
||||
};
|
||||
Send(message);
|
||||
Debug.Log("PointFound message sent");
|
||||
//Debug.Log("PointFound message sent");
|
||||
}
|
||||
|
||||
public void LevelEnd(string levelId)
|
||||
|
|
@ -93,7 +93,7 @@ namespace DofLibrary
|
|||
}
|
||||
};
|
||||
Send(message);
|
||||
Debug.Log("LevelEnd message sent");
|
||||
//Debug.Log("LevelEnd message sent");
|
||||
}
|
||||
|
||||
public void AllLevelEnd(float timeSpent)
|
||||
|
|
@ -107,9 +107,22 @@ namespace DofLibrary
|
|||
}
|
||||
};
|
||||
Send(message);
|
||||
Debug.Log("AllLevelEnd message sent");
|
||||
//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
|
||||
|
|
@ -120,7 +133,7 @@ namespace DofLibrary
|
|||
}
|
||||
};
|
||||
Send(message);
|
||||
Debug.Log("Heartbeat message sent");
|
||||
//Debug.Log("Heartbeat message sent");
|
||||
}
|
||||
|
||||
private void Send(ClientMessage message)
|
||||
|
|
|
|||
|
|
@ -137,6 +137,15 @@ namespace Dof
|
|||
public bool ShouldSerializeGameFinish() => __pbn__actual.Is(5);
|
||||
public void ResetGameFinish() => global::ProtoBuf.DiscriminatedUnionObject.Reset(ref __pbn__actual, 5);
|
||||
|
||||
[global::ProtoBuf.ProtoMember(21, Name = @"heartbeat")]
|
||||
public Heartbeat Heartbeat
|
||||
{
|
||||
get => __pbn__actual.Is(21) ? ((Heartbeat)__pbn__actual.Object) : default;
|
||||
set => __pbn__actual = new global::ProtoBuf.DiscriminatedUnionObject(21, value);
|
||||
}
|
||||
public bool ShouldSerializeHeartbeat() => __pbn__actual.Is(21);
|
||||
public void ResetHeartbeat() => global::ProtoBuf.DiscriminatedUnionObject.Reset(ref __pbn__actual, 21);
|
||||
|
||||
}
|
||||
|
||||
[global::ProtoBuf.ProtoContract()]
|
||||
|
|
@ -191,6 +200,9 @@ namespace Dof
|
|||
[global::System.ComponentModel.DefaultValue("")]
|
||||
public string IosGeneration { get; set; } = "";
|
||||
|
||||
[global::ProtoBuf.ProtoMember(4, Name = @"diff_count")]
|
||||
public int DiffCount { get; set; }
|
||||
|
||||
}
|
||||
|
||||
[global::ProtoBuf.ProtoContract()]
|
||||
|
|
@ -316,6 +328,12 @@ namespace Dof
|
|||
[global::ProtoBuf.ProtoMember(2, Name = @"score")]
|
||||
public int Score { get; set; }
|
||||
|
||||
[global::ProtoBuf.ProtoMember(3, Name = @"rank")]
|
||||
public int Rank { get; set; }
|
||||
|
||||
[global::ProtoBuf.ProtoMember(4, Name = @"award")]
|
||||
public int Award { get; set; }
|
||||
|
||||
}
|
||||
|
||||
[global::ProtoBuf.ProtoContract()]
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
using System.IO;
|
||||
using ProtoBuf.Meta;
|
||||
|
||||
namespace Guru
|
||||
namespace DofLibrary
|
||||
{
|
||||
public interface ISupportInitialize
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ message ServerMessage {
|
|||
LevelStart level_start = 3;
|
||||
PointFound point_found = 4;
|
||||
GameFinish game_finish = 5;
|
||||
|
||||
Heartbeat heartbeat = 21;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -41,6 +43,7 @@ message LevelResource {
|
|||
string level_id = 1;
|
||||
string android_generation = 2;
|
||||
string ios_generation = 3;
|
||||
int32 diff_count = 4;
|
||||
}
|
||||
|
||||
// PlayerEntered 服务端接收到 PlayerEnter 消息后发还给客户端的回执
|
||||
|
|
@ -82,6 +85,8 @@ message AllLevelEnd {
|
|||
message GameScore {
|
||||
string uid = 1;
|
||||
int32 score = 2;
|
||||
int32 rank = 3;
|
||||
int32 award = 4;
|
||||
}
|
||||
|
||||
message GameFinish {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "com.guru.unity.gurudoflib",
|
||||
"displayName": "GuruDofLib",
|
||||
"version": "0.0.3",
|
||||
"version": "0.1.2",
|
||||
"description": "\u57fa\u4e8eGuru kcp\u5e93\u5b9e\u73b0\u7684\u5ba2\u6237\u7aef\u63a5\u53e3\u5c01\u88c5",
|
||||
"keywords": [
|
||||
"unity",
|
||||
|
|
|
|||
Loading…
Reference in New Issue