summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-05-04 17:53:48 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-05-04 17:53:48 -0400
commit9728fe3f347328323ff79c6c93df2ab390f6070e (patch)
tree83af5d44e0542e87182e55138fe387c76af1ba71 /src
parent4eb68e96ed2b986cf2db621b24f4ebbdd0cf83f1 (diff)
downloadSMAPI-9728fe3f347328323ff79c6c93df2ab390f6070e.tar.gz
SMAPI-9728fe3f347328323ff79c6c93df2ab390f6070e.tar.bz2
SMAPI-9728fe3f347328323ff79c6c93df2ab390f6070e.zip
add Multiplayer.PeerConnected event
Diffstat (limited to 'src')
-rw-r--r--src/SMAPI/Events/IMultiplayerEvents.cs5
-rw-r--r--src/SMAPI/Events/PeerConnectedEventArgs.cs25
-rw-r--r--src/SMAPI/Framework/Events/EventManager.cs6
-rw-r--r--src/SMAPI/Framework/Events/ModMultiplayerEvents.cs9
-rw-r--r--src/SMAPI/Framework/SMultiplayer.cs4
5 files changed, 46 insertions, 3 deletions
diff --git a/src/SMAPI/Events/IMultiplayerEvents.cs b/src/SMAPI/Events/IMultiplayerEvents.cs
index 4a31f48e..af9b5f17 100644
--- a/src/SMAPI/Events/IMultiplayerEvents.cs
+++ b/src/SMAPI/Events/IMultiplayerEvents.cs
@@ -5,9 +5,12 @@ namespace StardewModdingAPI.Events
/// <summary>Events raised for multiplayer messages and connections.</summary>
public interface IMultiplayerEvents
{
- /// <summary>Raised after the mod context for a peer is received. This happens before the game approves the connection, so the player doesn't yet exist in the game. This is the earliest point where messages can be sent to the peer via SMAPI.</summary>
+ /// <summary>Raised after the mod context for a peer is received. This happens before the game approves the connection (<see cref="PeerConnected"/>), so the player doesn't yet exist in the game. This is the earliest point where messages can be sent to the peer via SMAPI.</summary>
event EventHandler<PeerContextReceivedEventArgs> PeerContextReceived;
+ /// <summary>Raised after a peer connection is approved by the game.</summary>
+ event EventHandler<PeerConnectedEventArgs> PeerConnected;
+
/// <summary>Raised after a mod message is received over the network.</summary>
event EventHandler<ModMessageReceivedEventArgs> ModMessageReceived;
diff --git a/src/SMAPI/Events/PeerConnectedEventArgs.cs b/src/SMAPI/Events/PeerConnectedEventArgs.cs
new file mode 100644
index 00000000..bfaa2bd3
--- /dev/null
+++ b/src/SMAPI/Events/PeerConnectedEventArgs.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace StardewModdingAPI.Events
+{
+ /// <summary>Event arguments for an <see cref="IMultiplayerEvents.PeerConnected"/> event.</summary>
+ public class PeerConnectedEventArgs : EventArgs
+ {
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>The peer whose metadata was received.</summary>
+ public IMultiplayerPeer Peer { get; }
+
+
+ /*********
+ ** Public methods
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="peer">The peer whose metadata was received.</param>
+ internal PeerConnectedEventArgs(IMultiplayerPeer peer)
+ {
+ this.Peer = peer;
+ }
+ }
+}
diff --git a/src/SMAPI/Framework/Events/EventManager.cs b/src/SMAPI/Framework/Events/EventManager.cs
index a9dfda97..cc718d2c 100644
--- a/src/SMAPI/Framework/Events/EventManager.cs
+++ b/src/SMAPI/Framework/Events/EventManager.cs
@@ -109,9 +109,12 @@ namespace StardewModdingAPI.Framework.Events
/****
** Multiplayer
****/
- /// <summary>Raised after the mod context for a peer is received. This happens before the game approves the connection, so the player doesn't yet exist in the game. This is the earliest point where messages can be sent to the peer via SMAPI.</summary>
+ /// <summary>Raised after the mod context for a peer is received. This happens before the game approves the connection (<see cref="IMultiplayerEvents.PeerConnected"/>), so the player doesn't yet exist in the game. This is the earliest point where messages can be sent to the peer via SMAPI.</summary>
public readonly ManagedEvent<PeerContextReceivedEventArgs> PeerContextReceived;
+ /// <summary>Raised after a peer connection is approved by the game.</summary>
+ public readonly ManagedEvent<PeerConnectedEventArgs> PeerConnected;
+
/// <summary>Raised after a mod message is received over the network.</summary>
public readonly ManagedEvent<ModMessageReceivedEventArgs> ModMessageReceived;
@@ -218,6 +221,7 @@ namespace StardewModdingAPI.Framework.Events
this.MouseWheelScrolled = ManageEventOf<MouseWheelScrolledEventArgs>(nameof(IModEvents.Input), nameof(IInputEvents.MouseWheelScrolled));
this.PeerContextReceived = ManageEventOf<PeerContextReceivedEventArgs>(nameof(IModEvents.Multiplayer), nameof(IMultiplayerEvents.PeerContextReceived));
+ this.PeerConnected = ManageEventOf<PeerConnectedEventArgs>(nameof(IModEvents.Multiplayer), nameof(IMultiplayerEvents.PeerConnected));
this.ModMessageReceived = ManageEventOf<ModMessageReceivedEventArgs>(nameof(IModEvents.Multiplayer), nameof(IMultiplayerEvents.ModMessageReceived));
this.PeerDisconnected = ManageEventOf<PeerDisconnectedEventArgs>(nameof(IModEvents.Multiplayer), nameof(IMultiplayerEvents.PeerDisconnected));
diff --git a/src/SMAPI/Framework/Events/ModMultiplayerEvents.cs b/src/SMAPI/Framework/Events/ModMultiplayerEvents.cs
index 152c4e0c..9f76511e 100644
--- a/src/SMAPI/Framework/Events/ModMultiplayerEvents.cs
+++ b/src/SMAPI/Framework/Events/ModMultiplayerEvents.cs
@@ -9,13 +9,20 @@ namespace StardewModdingAPI.Framework.Events
/*********
** Accessors
*********/
- /// <summary>Raised after the mod context for a peer is received. This happens before the game approves the connection, so the player doesn't yet exist in the game. This is the earliest point where messages can be sent to the peer via SMAPI.</summary>
+ /// <summary>Raised after the mod context for a peer is received. This happens before the game approves the connection (<see cref="IMultiplayerEvents.PeerConnected"/>), so the player doesn't yet exist in the game. This is the earliest point where messages can be sent to the peer via SMAPI.</summary>
public event EventHandler<PeerContextReceivedEventArgs> PeerContextReceived
{
add => this.EventManager.PeerContextReceived.Add(value);
remove => this.EventManager.PeerContextReceived.Remove(value);
}
+ /// <summary>Raised after a peer connection is approved by the game.</summary>
+ public event EventHandler<PeerConnectedEventArgs> PeerConnected
+ {
+ add => this.EventManager.PeerConnected.Add(value);
+ remove => this.EventManager.PeerConnected.Remove(value);
+ }
+
/// <summary>Raised after a mod message is received over the network.</summary>
public event EventHandler<ModMessageReceivedEventArgs> ModMessageReceived
{
diff --git a/src/SMAPI/Framework/SMultiplayer.cs b/src/SMAPI/Framework/SMultiplayer.cs
index 821c343f..8c444e45 100644
--- a/src/SMAPI/Framework/SMultiplayer.cs
+++ b/src/SMAPI/Framework/SMultiplayer.cs
@@ -231,7 +231,11 @@ namespace StardewModdingAPI.Framework
this.AddPeer(peer, canBeHost: false);
}
+ // let game handle connection
resume();
+
+ // raise event
+ this.EventManager.PeerConnected.Raise(new PeerConnectedEventArgs(this.Peers[message.FarmerID]));
break;
// handle mod message