public void CreateServerDriver(World world, out NetworkDriver driver, out NetworkPipeline unreliablePipeline, out NetworkPipeline reliablePipeline, out NetworkPipeline unreliableFragmentedPipeline)
        {
            var reliabilityParams = new ReliableUtility.Parameters {
                WindowSize = 32
            };
            var fragmentationParams = new FragmentationUtility.Parameters {
                PayloadCapacity = 16 * 1024
            };

#if UNITY_EDITOR || DEVELOPMENT_BUILD
            var netParams = new NetworkConfigParameter
            {
                maxConnectAttempts  = NetworkParameterConstants.MaxConnectAttempts,
                connectTimeoutMS    = NetworkParameterConstants.ConnectTimeoutMS,
                disconnectTimeoutMS = NetworkParameterConstants.DisconnectTimeoutMS,
                maxFrameTimeMS      = 100
            };
            driver = NetworkDriver.Create(netParams, reliabilityParams, fragmentationParams);
#else
            driver = NetworkDriver.Create(reliabilityParams);
#endif

            unreliablePipeline           = driver.CreatePipeline(typeof(NullPipelineStage));
            reliablePipeline             = driver.CreatePipeline(typeof(ReliableSequencedPipelineStage));
            unreliableFragmentedPipeline = driver.CreatePipeline(typeof(FragmentationPipelineStage));
        }
        public void CreateClientDriver(World world, out NetworkDriver driver, out NetworkPipeline unreliablePipeline, out NetworkPipeline reliablePipeline, out NetworkPipeline unreliableFragmentedPipeline)
        {
            var reliabilityParams = new ReliableUtility.Parameters {
                WindowSize = 32
            };
            var fragmentationParams = new FragmentationUtility.Parameters {
                PayloadCapacity = 16 * 1024
            };

#if UNITY_EDITOR || DEVELOPMENT_BUILD
            var netParams = new NetworkConfigParameter
            {
                maxConnectAttempts  = NetworkParameterConstants.MaxConnectAttempts,
                connectTimeoutMS    = NetworkParameterConstants.ConnectTimeoutMS,
                disconnectTimeoutMS = NetworkParameterConstants.DisconnectTimeoutMS,
                maxFrameTimeMS      = 100
            };

            var simulatorParams = ClientSimulatorParameters;
            driver = NetworkDriver.Create(netParams, simulatorParams, reliabilityParams, fragmentationParams);
#else
            driver = NetworkDriver.Create(reliabilityParams);
#endif

#if UNITY_EDITOR || DEVELOPMENT_BUILD
            if (simulatorParams.PacketDelayMs > 0 || simulatorParams.PacketDropInterval > 0)
            {
                unreliablePipeline = driver.CreatePipeline(
                    typeof(SimulatorPipelineStage),
                    typeof(SimulatorPipelineStageInSend));
                reliablePipeline = driver.CreatePipeline(
                    typeof(SimulatorPipelineStage),
                    typeof(ReliableSequencedPipelineStage),
                    typeof(SimulatorPipelineStageInSend));
                unreliableFragmentedPipeline = driver.CreatePipeline(
                    typeof(SimulatorPipelineStage),
                    typeof(FragmentationPipelineStage),
                    typeof(SimulatorPipelineStageInSend));
            }
            else
#endif
            {
                unreliablePipeline           = driver.CreatePipeline(typeof(NullPipelineStage));
                reliablePipeline             = driver.CreatePipeline(typeof(ReliableSequencedPipelineStage));
                unreliableFragmentedPipeline = driver.CreatePipeline(typeof(FragmentationPipelineStage));
            }
        }
Ejemplo n.º 3
0
        public NetworkPipelineStage StaticInitialize(byte *staticInstanceBuffer, int staticInstanceBufferLength, INetworkParameter[] netParams)
        {
            FragmentationUtility.Parameters param = default;
            foreach (var netParam in netParams)
            {
                if (netParam is FragmentationUtility.Parameters)
                {
                    param = (FragmentationUtility.Parameters)netParam;
                }
            }

            var payloadCapacity = param.PayloadCapacity;

            if (payloadCapacity == 0)
            {
                payloadCapacity = 4 * 1024;
            }

            if (payloadCapacity <= NetworkParameterConstants.MTU)
            {
                throw new InvalidOperationException($"Please specify a FragmentationUtility.Parameters with a PayloadCapacity greater than MTU, which is {NetworkParameterConstants.MTU}");
            }

            param.PayloadCapacity = payloadCapacity;

            UnsafeUtility.MemCpy(staticInstanceBuffer, &param, UnsafeUtility.SizeOf <FragmentationUtility.Parameters>());

            return(new NetworkPipelineStage(
                       Receive: ReceiveFunctionPointer,
                       Send: SendFunctionPointer,
                       InitializeConnection: InitializeConnectionFunctionPointer,
                       ReceiveCapacity: sizeof(FragContext) + payloadCapacity,
                       SendCapacity: sizeof(FragContext) + payloadCapacity,
                       HeaderCapacity: FragHeaderCapacity,
                       SharedStateCapacity: 0,
                       param.PayloadCapacity
                       ));
        }