using System;
using Galaxy.Api;
using StardewValley.Network;
using StardewValley.SDKs;
namespace StardewModdingAPI.Framework.Networking
{
/// A multiplayer client used to connect to a hosted server. This is an implementation of with callbacks for SMAPI functionality.
internal class SGalaxyNetClient : GalaxyNetClient
{
/*********
** Properties
*********/
/// A callback to raise when receiving a message. This receives the incoming message, a method to send an arbitrary message, and a callback to run the default logic.
private readonly Action, Action> OnProcessingMessage;
/// A callback to raise when sending a message. This receives the outgoing message, a method to send an arbitrary message, and a callback to resume the default logic.
private readonly Action, Action> OnSendingMessage;
/*********
** Public methods
*********/
/// Construct an instance.
/// The remote address being connected.
/// A callback to raise when receiving a message. This receives the incoming message, a method to send an arbitrary message, and a callback to run the default logic.
/// A callback to raise when sending a message. This receives the outgoing message, a method to send an arbitrary message, and a callback to resume the default logic.
public SGalaxyNetClient(GalaxyID address, Action, Action> onProcessingMessage, Action, Action> onSendingMessage)
: base(address)
{
this.OnProcessingMessage = onProcessingMessage;
this.OnSendingMessage = onSendingMessage;
}
/// Send a message to the connected peer.
public override void sendMessage(OutgoingMessage message)
{
this.OnSendingMessage(message, base.sendMessage, () => base.sendMessage(message));
}
/*********
** Protected methods
*********/
/// Process an incoming network message.
/// The message to process.
protected override void processIncomingMessage(IncomingMessage message)
{
this.OnProcessingMessage(message, base.sendMessage, () => base.processIncomingMessage(message));
}
}
}