Beispiel #1
0
        /// <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;
        }
Beispiel #3
0
        protected ClientAddonNetworkReceiver(
            ClientAddon clientAddon,
            PacketManager packetManager
            )
        {
            ClientAddon   = clientAddon;
            PacketManager = packetManager;

            PacketHandlers = new Dictionary <byte, ClientPacketHandler>();
        }
Beispiel #4
0
        /// <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>);
        }