summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/SMultiplayer.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2018-11-04 23:07:10 -0500
committerJesse Plamondon-Willard <github@jplamondonw.com>2018-11-04 23:07:10 -0500
commitb4a5b3829f0f738e5b7e05048068eaec9d2d01d1 (patch)
treea78c44e929ff1de70d20b012385c418aea7e78a6 /src/SMAPI/Framework/SMultiplayer.cs
parent222265816d803e8e145c0a500568412d03dd49da (diff)
downloadSMAPI-b4a5b3829f0f738e5b7e05048068eaec9d2d01d1.tar.gz
SMAPI-b4a5b3829f0f738e5b7e05048068eaec9d2d01d1.tar.bz2
SMAPI-b4a5b3829f0f738e5b7e05048068eaec9d2d01d1.zip
add PeerDisconnected event (#480)
Diffstat (limited to 'src/SMAPI/Framework/SMultiplayer.cs')
-rw-r--r--src/SMAPI/Framework/SMultiplayer.cs26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/SMAPI/Framework/SMultiplayer.cs b/src/SMAPI/Framework/SMultiplayer.cs
index 9f649639..2d0f8b9b 100644
--- a/src/SMAPI/Framework/SMultiplayer.cs
+++ b/src/SMAPI/Framework/SMultiplayer.cs
@@ -140,6 +140,9 @@ namespace StardewModdingAPI.Framework
/// <param name="resume">Send the underlying message.</param>
protected void OnServerSendingMessage(SLidgrenServer server, NetConnection connection, OutgoingMessage message, Action resume)
{
+ if (this.VerboseLogging)
+ this.Monitor.Log($"SERVER SEND {(MessageType)message.MessageType} {message.FarmerID}", LogLevel.Trace);
+
resume();
}
@@ -149,6 +152,9 @@ namespace StardewModdingAPI.Framework
/// <param name="resume">Send the underlying message.</param>
protected void OnClientSendingMessage(SLidgrenClient client, OutgoingMessage message, Action resume)
{
+ if (this.VerboseLogging)
+ this.Monitor.Log($"CLIENT SEND {(MessageType)message.MessageType} {message.FarmerID}", LogLevel.Trace);
+
switch (message.MessageType)
{
// sync mod context (step 1)
@@ -171,6 +177,8 @@ namespace StardewModdingAPI.Framework
/// <param name="resume">Process the message using the game's default logic.</param>
public void OnServerProcessingMessage(SLidgrenServer server, NetIncomingMessage rawMessage, IncomingMessage message, Action resume)
{
+ if (this.VerboseLogging)
+ this.Monitor.Log($"SERVER RECV {(MessageType)message.MessageType} {message.FarmerID}", LogLevel.Trace);
switch (message.MessageType)
{
@@ -213,7 +221,7 @@ namespace StardewModdingAPI.Framework
}
// raise event
- this.EventManager.ContextReceived.Raise(new ContextReceivedEventArgs(newPeer));
+ this.EventManager.PeerContextReceived.Raise(new PeerContextReceivedEventArgs(newPeer));
}
break;
@@ -248,8 +256,8 @@ namespace StardewModdingAPI.Framework
/// <returns>Returns whether the message was handled.</returns>
public void OnClientProcessingMessage(SLidgrenClient client, IncomingMessage message, Action resume)
{
- if (message.MessageType != Multiplayer.farmerDelta && message.MessageType != Multiplayer.locationDelta && message.MessageType != Multiplayer.teamDelta && message.MessageType != Multiplayer.worldDelta)
- this.Monitor.Log($"CLIENT RECV {(MessageType)message.MessageType} {message.FarmerID}", LogLevel.Alert);
+ if (this.VerboseLogging)
+ this.Monitor.Log($"CLIENT RECV {(MessageType)message.MessageType} {message.FarmerID}", LogLevel.Trace);
switch (message.MessageType)
{
@@ -315,8 +323,12 @@ namespace StardewModdingAPI.Framework
{
foreach (long playerID in this.DisconnectingFarmers)
{
- this.Monitor.Log($"Player quit: {playerID}", LogLevel.Trace);
- this.Peers.Remove(playerID);
+ if (this.Peers.TryGetValue(playerID, out MultiplayerPeer peer))
+ {
+ this.Monitor.Log($"Player quit: {playerID}", LogLevel.Trace);
+ this.Peers.Remove(playerID);
+ this.EventManager.PeerDisconnected.Raise(new PeerDisconnectedEventArgs(peer));
+ }
}
base.removeDisconnectedFarmers();
@@ -397,7 +409,7 @@ namespace StardewModdingAPI.Framework
/// <summary>Save a received peer.</summary>
/// <param name="peer">The peer to add.</param>
/// <param name="canBeHost">Whether to track the peer as the host if applicable.</param>
- /// <param name="raiseEvent">Whether to raise the <see cref="Events.EventManager.ContextReceived"/> event.</param>
+ /// <param name="raiseEvent">Whether to raise the <see cref="Events.EventManager.PeerContextReceived"/> event.</param>
private void AddPeer(MultiplayerPeer peer, bool canBeHost, bool raiseEvent = true)
{
// store
@@ -407,7 +419,7 @@ namespace StardewModdingAPI.Framework
// raise event
if (raiseEvent)
- this.EventManager.ContextReceived.Raise(new ContextReceivedEventArgs(peer));
+ this.EventManager.PeerContextReceived.Raise(new PeerContextReceivedEventArgs(peer));
}
/// <summary>Read the metadata context for a player.</summary>