/// <inheritdoc /> public IServerAddonNetworkSender <TPacketId> GetNetworkSender <TPacketId>( ServerAddon 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 IServerAddonNetworkSender <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 ServerAddonNetworkSender <TPacketId>(this, addon); addon.NetworkSender = newAddonNetworkSender; return(newAddonNetworkSender); }
public ServerAddonNetworkReceiver( ServerAddon serverAddon, PacketManager packetManager ) { _serverAddon = serverAddon; _packetManager = packetManager; }
public ServerAddonNetworkSender( NetServer netServer, ServerAddon serverAddon ) { _netServer = netServer; _serverAddon = serverAddon; _packetIdSize = (byte)PacketIdLookup.Count; }
/// <inheritdoc /> public IServerAddonNetworkReceiver <TPacketId> GetNetworkReceiver <TPacketId>( ServerAddon 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"); } if (!addon.Id.HasValue) { throw new InvalidOperationException("Addon has no ID assigned"); } ServerAddonNetworkReceiver <TPacketId> networkReceiver = null; // Check whether an existing network receiver exists if (addon.NetworkReceiver == null) { networkReceiver = new ServerAddonNetworkReceiver <TPacketId>(addon, _packetManager); addon.NetworkReceiver = networkReceiver; } else if (!(addon.NetworkReceiver is IServerAddonNetworkReceiver <TPacketId>)) { throw new InvalidOperationException("Cannot request network receivers with differing generic parameters"); } // After we know that this call did not use a different generic, we can update packet info ServerUpdatePacket.AddonPacketInfoDict[addon.Id.Value] = new AddonPacketInfo( // Transform the packet instantiator function from a TPacketId as parameter to byte networkReceiver?.TransformPacketInstantiator(packetInstantiator), (byte)Enum.GetValues(typeof(TPacketId)).Length ); return(addon.NetworkReceiver as IServerAddonNetworkReceiver <TPacketId>); }