/// <inheritdoc /> public IClientAddonNetworkSender <TPacketId> GetNetworkSender <TPacketId>( ClientAddon addon ) where TPacketId : Enum { if (addon == null) { throw new ArgumentException("Parameter 'addon' cannot be null"); } // Check whether this addon has actually requested network access through their property // We check this otherwise an ID has not been assigned and it can't send network data if (!addon.NeedsNetwork) { throw new InvalidOperationException("Addon has not requested network access through property"); } // Check whether there already is a network sender for the given addon if (addon.NetworkSender != null) { if (!(addon.NetworkSender is IClientAddonNetworkSender <TPacketId> addonNetworkSender)) { throw new InvalidOperationException("Cannot request network senders with differing generic parameters"); } return(addonNetworkSender); } // Otherwise create one, store it and return it var newAddonNetworkSender = new ClientAddonNetworkSender <TPacketId>(this, addon); addon.NetworkSender = newAddonNetworkSender; return(newAddonNetworkSender); }
public ClientAddonNetworkSender( NetClient netClient, ClientAddon clientAddon ) { _netClient = netClient; _clientAddon = clientAddon; _packetIdSize = (byte)PacketIdLookup.Count; }
protected ClientAddonNetworkReceiver( ClientAddon clientAddon, PacketManager packetManager ) { ClientAddon = clientAddon; PacketManager = packetManager; PacketHandlers = new Dictionary <byte, ClientPacketHandler>(); }
/// <inheritdoc /> public IClientAddonNetworkReceiver <TPacketId> GetNetworkReceiver <TPacketId>( ClientAddon addon, Func <TPacketId, IPacketData> packetInstantiator ) where TPacketId : Enum { if (addon == null) { throw new ArgumentException("Parameter 'addon' cannot be null"); } if (packetInstantiator == null) { throw new ArgumentException("Parameter 'packetInstantiator' cannot be null"); } // Check whether this addon has actually requested network access through their property // We check this otherwise an ID has not been assigned and it can't send network data if (!addon.NeedsNetwork) { throw new InvalidOperationException("Addon has not requested network access through property"); } ClientAddonNetworkReceiver <TPacketId> networkReceiver = null; // Check whether an existing network receiver exists if (addon.NetworkReceiver == null) { networkReceiver = new ClientAddonNetworkReceiver <TPacketId>(addon, _packetManager); addon.NetworkReceiver = networkReceiver; } else if (!(addon.NetworkReceiver is IClientAddonNetworkReceiver <TPacketId>)) { throw new InvalidOperationException("Cannot request network receivers with differing generic parameters"); } networkReceiver?.AssignAddonPacketInfo(packetInstantiator); return(addon.NetworkReceiver as IClientAddonNetworkReceiver <TPacketId>); }