예제 #1
0
        /// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        public BasicNetworkDriver(params INetworkParameter[] param)
        {
            m_NetworkParams = default(Parameters);
            object boxedParams = m_NetworkParams;

            foreach (var field in typeof(Parameters).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
            {
                for (int i = 0; i < param.Length; ++i)
                {
                    if (field.FieldType.IsAssignableFrom(param[i].GetType()))
                    {
                        field.SetValue(boxedParams, param[i]);
                    }
                }
            }

            m_NetworkParams = (Parameters)boxedParams;

            if (m_NetworkParams.bitStream.size == 0)
            {
                m_NetworkParams.bitStream.size = NetworkParameterConstants.DriverBitStreamSize;
            }

            if (m_NetworkParams.config.maxConnectAttempts == 0)
            {
                m_NetworkParams.config.maxConnectAttempts = NetworkParameterConstants.MaxConnectAttempts;
            }

            if (m_NetworkParams.config.connectTimeout == 0)
            {
                m_NetworkParams.config.connectTimeout = NetworkParameterConstants.ConnectTimeout;
            }

            if (m_NetworkParams.config.disconnectTimeout == 0)
            {
                m_NetworkParams.config.disconnectTimeout = NetworkParameterConstants.DisconnectTimeout;
            }

            m_BitStream = new BitStream(m_NetworkParams.bitStream.size, Allocator.Persistent);

            m_NetworkInterface = new T();
            m_NetworkInterface.Initialize();

            m_NetworkAcceptQueue = new NativeQueue <int>(Allocator.Persistent);

            m_ConnectionList = new NativeArray <Connection>(NetworkParameterConstants.MaximumConnectionsSupported, Allocator.Persistent);

            m_FreeList   = new ConnectionFreeList(NetworkParameterConstants.MaximumConnectionsSupported);
            m_EventQueue = new NetworkEventQueue(NetworkParameterConstants.MaximumConnectionsSupported,
                                                 NetworkParameterConstants.NetworkEventQLength);

            for (int i = 0; i < NetworkParameterConstants.MaximumConnectionsSupported; i++)
            {
                m_ConnectionList[i] = new Connection {
                    Id = i, Version = 1
                }
            }
            ;

            m_InternalState = new NativeArray <int>(1, Allocator.Persistent);
            m_PendingFree   = new NativeQueue <int>(Allocator.Persistent);
            Listening       = false;
        }
예제 #2
0
 public void Initialize(int receiveQueueSize)
 {
     m_IPCQueue     = new BucketQ <IPCData>(NetworkParameterConstants.MaximumConnectionsSupported, receiveQueueSize);
     m_FreeList     = new ConnectionFreeList(NetworkParameterConstants.MaximumConnectionsSupported);
     m_IPCEndPoints = new Dictionary <int, ushort>();
 }