broadcast message when player leaves

This commit is contained in:
AmazingAlek 2020-03-06 19:03:35 +01:00 committed by GitHub
parent 9840e0698f
commit 9e0567358d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 80 additions and 33 deletions

View File

@ -3,26 +3,22 @@ using UnityEngine.Networking;
namespace QSB.Events
{
public class DeathMessage : QSBMessage
public class DeathMessage : NameMessage
{
public override MessageType MessageType => MessageType.Death;
public string PlayerName { get; set; }
public uint SenderId { get; set; }
public short DeathId { get; set; }
public override void Deserialize(NetworkReader reader)
{
PlayerName = reader.ReadString();
base.Deserialize(reader);
DeathId = reader.ReadInt16();
SenderId = reader.ReadUInt32();
}
public override void Serialize(NetworkWriter writer)
{
writer.Write(PlayerName);
base.Serialize(writer);
writer.Write(DeathId);
writer.Write(SenderId);
}
}
}

View File

@ -1,25 +1,9 @@
using QSB.Messaging;
using UnityEngine.Networking;
namespace QSB.Events
{
public class JoinMessage : QSBMessage
public class JoinMessage : NameMessage
{
public override MessageType MessageType => MessageType.Join;
public uint SenderId { get; set; }
public string PlayerName { get; set; }
public override void Deserialize(NetworkReader reader)
{
PlayerName = reader.ReadString();
SenderId = reader.ReadUInt32();
}
public override void Serialize(NetworkWriter writer)
{
writer.Write(PlayerName);
writer.Write(SenderId);
}
}
}

View File

@ -0,0 +1,9 @@
using QSB.Messaging;
namespace QSB.Events
{
public class LeaveMessage : NameMessage
{
public override MessageType MessageType => MessageType.Leave;
}
}

23
QSB/Events/NameMessage.cs Normal file
View File

@ -0,0 +1,23 @@
using QSB.Messaging;
using UnityEngine.Networking;
namespace QSB.Events
{
public abstract class NameMessage : QSBMessage
{
public uint SenderId { get; set; }
public string PlayerName { get; set; }
public override void Deserialize(NetworkReader reader)
{
PlayerName = reader.ReadString();
SenderId = reader.ReadUInt32();
}
public override void Serialize(NetworkWriter writer)
{
writer.Write(PlayerName);
writer.Write(SenderId);
}
}
}

View File

@ -12,12 +12,17 @@ namespace QSB.Events
public static string MyName { get; private set; }
private MessageHandler<JoinMessage> _joinHandler;
private MessageHandler<LeaveMessage> _leaveHandler;
private void Awake()
{
_joinHandler = new MessageHandler<JoinMessage>();
_joinHandler.OnClientReceiveMessage += OnClientReceiveMessage;
_joinHandler.OnServerReceiveMessage += OnServerReceiveMessage;
_leaveHandler = new MessageHandler<LeaveMessage>();
_leaveHandler.OnClientReceiveMessage += OnClientReceiveMessage;
_leaveHandler.OnServerReceiveMessage += OnServerReceiveMessage;
}
public void Join(string playerName)
@ -34,14 +39,17 @@ namespace QSB.Events
PlayerName = playerName,
SenderId = NetPlayer.LocalInstance.netId.Value
};
if (isServer)
{
_joinHandler.SendToAll(message);
}
else
{
_joinHandler.SendToServer(message);
}
public void Leave(uint playerId) // called by server
{
var message = new LeaveMessage
{
PlayerName = PlayerNames[playerId],
SenderId = playerId
};
_leaveHandler.SendToAll(message);
}
private void OnServerReceiveMessage(JoinMessage message)
@ -55,5 +63,19 @@ namespace QSB.Events
DebugLog.All(message.PlayerName, "joined!");
}
private void OnServerReceiveMessage(LeaveMessage message)
{
_leaveHandler.SendToAll(message);
}
private void OnClientReceiveMessage(LeaveMessage message)
{
if (PlayerNames.ContainsKey(message.SenderId))
{
PlayerNames.Remove(message.SenderId);
}
DebugLog.All(message.PlayerName, "left");
}
}
}

View File

@ -8,7 +8,8 @@ namespace QSB.Messaging
WakeUp = MsgType.Highest + 2,
AnimTrigger = MsgType.Highest + 3,
Join = MsgType.Highest + 4,
Death = MsgType.Highest + 5
Death = MsgType.Highest + 5,
Leave = MsgType.Highest + 6
// Add other message types here, incrementing the value.
}
}

View File

@ -106,11 +106,13 @@
<Compile Include="Animation\AnimFloatParam.cs" />
<Compile Include="Animation\AnimTriggerMessage.cs" />
<Compile Include="Animation\AnimTrigger.cs" />
<Compile Include="Events\JoinMessage.cs" />
<Compile Include="Events\LeaveMessage.cs" />
<Compile Include="NetPlayer.cs" />
<Compile Include="DebugLog.cs" />
<Compile Include="Events\DeathMessage.cs" />
<Compile Include="Events\PlayerJoin.cs" />
<Compile Include="Events\JoinMessage.cs" />
<Compile Include="Events\NameMessage.cs" />
<Compile Include="Messaging\MessageHandler.cs" />
<Compile Include="Messaging\MessageType.cs" />
<Compile Include="Messaging\QSBMessage.cs" />

View File

@ -112,6 +112,16 @@ namespace QSB
_canEditName = true;
}
public override void OnServerDisconnect(NetworkConnection conn)
{
DebugLog.Screen("OnServerDisconnect");
var playerId = conn.playerControllers[0].gameObject.GetComponent<NetPlayer>().netId.Value;
GetComponent<PlayerJoin>().Leave(playerId);
base.OnServerDisconnect(conn);
}
private void OnGUI()
{
GUI.Label(new Rect(10, 10, 200f, 20f), "Name:");