Beispiel #1
0
        public void Run()
        {
            //ByteRecycler must be allowed to allocate the size of the biggest message
            ByteRecycler.AddPoolSize(128 * 1024 * 1024);
            NetworkHandler <StateObject> handler = new NetworkHandler <StateObject>(false);

            handler.RegisterConnectCallback(Connected);
            handler.RegisterDisconnectCallback(Disconnected);
            handler.RegisterCallback(0, GotMessage);
            handler.RegisterCallback(1, RelayReliable);
            DarkNetwork <StateObject> dn = new DarkNetwork <StateObject>();

            dn.SetupServer(new IPEndPoint(IPAddress.IPv6Any, 12345), handler);
            int messageID = 0;

            while (true)
            {
                NetworkMessage nm        = NetworkMessage.Create(0, 2048, NetworkMessageType.UNORDERED_UNRELIABLE);
                byte[]         sendBytes = Encoding.UTF8.GetBytes("Message " + messageID++);
                Array.Copy(sendBytes, 0, nm.data.data, 0, sendBytes.Length);
                nm.data.size = sendBytes.Length;
                handler.SendMessageToAll(nm);
                //Recycler<NetworkMessage>.GarbageCollect(500, 1000);
                //ByteRecycler.GarbageCollect(2048, 500, 1000);
                //ByteRecycler.GarbageCollect(128 * 1024 * 1024, 2, 4);
                //PrintRecyclerStats();
                Thread.Sleep(1000);
            }
        }
Beispiel #2
0
        public void Run()
        {
            r.NextBytes(randomBytes);
            //ByteRecycler must be allowed to allocate the size of the biggest message
            ByteRecycler.AddPoolSize(128 * 1024 * 1024);
            NetworkHandler <StateObject> handler = new NetworkHandler <StateObject>(false);

            handler.RegisterConnectCallback(Connected);
            handler.RegisterDisconnectCallback(Disconnected);
            handler.RegisterCallback(0, GotMessage);
            handler.RegisterCallback(1, ReliableReceive);
            DarkNetwork <StateObject> dn = new DarkNetwork <StateObject>();
            IPAddress netAddr            = IPAddress.Parse("2403:5800:9100:5b00:76da:38ff:fea3:9dbe");

            dn.SetupClient(new IPEndPoint(netAddr, 12345), handler);
            Thread.Sleep(1000);
            NetworkMessage nmbig = NetworkMessage.Create(1, randomBytes.Length, NetworkMessageType.ORDERED_RELIABLE);

            Array.Copy(randomBytes, 0, nmbig.data.data, 0, randomBytes.Length);
            handler.SendMessage(nmbig);
            int messageID = 0;

            while (running)
            {
                NetworkMessage nm        = NetworkMessage.Create(0, 2048, NetworkMessageType.ORDERED_UNRELIABLE);
                byte[]         sendBytes = Encoding.UTF8.GetBytes("Message " + messageID++);
                Array.Copy(sendBytes, 0, nm.data.data, 0, sendBytes.Length);
                nm.data.size = sendBytes.Length;
                handler.SendMessage(nm);
                //Recycler<NetworkMessage>.GarbageCollect(500, 1000);
                //ByteRecycler.GarbageCollect(2048, 500, 1000);
                //ByteRecycler.GarbageCollect(128 * 1024 * 1024, 2, 4);
                //PrintRecyclerStats();
                Thread.Sleep(1000);
            }
            dn.Shutdown();
        }
Beispiel #3
0
        public void Start()
        {
            //Set buffered UDPMesh
            UDPMeshLib.UdpMeshCommon.USE_BUFFERS = true;
            //Set pool sizes for ByteRecycler
            ByteRecycler.AddPoolSize(SMALL_MESSAGE_SIZE);
            ByteRecycler.AddPoolSize(MEDIUM_MESSAGE_SIZE);
            ByteRecycler.AddPoolSize(LARGE_MESSAGE_SIZE);
            MessageWriter.RegisterType <ByteArray>(WriteByteArrayToStream);
            MessageReader.RegisterType <ByteArray>(ReadByteArrayFromStream);

            //Prevent loads if multiple copies of DMP are installed. KSP will instantate us twice.
            if (dmpClient != null)
            {
                warnDuplicateInstall = true;
                return;
            }

            if (!CompatibilityChecker.IsCompatible() || !InstallChecker.IsCorrectlyInstalled())
            {
                modDisabled = true;
                enabled     = false;
                return;
            }

            TimingManager.FixedUpdateAdd(TimingManager.TimingStage.BetterLateThanNever, TimingManagerFixedUpdate);
            dmpDir      = Path.Combine(Path.Combine(Path.Combine(KSPUtil.ApplicationRootPath, "GameData"), "DarkMultiPlayer"), "Plugins");
            dmpDataDir  = Path.Combine(dmpDir, "Data");
            gameDataDir = Path.Combine(KSPUtil.ApplicationRootPath, "GameData");
            kspRootPath = KSPUtil.ApplicationRootPath;

            //Fix DarkLog time/thread marker in the log during init.
            DarkLog.SetMainThread();
            lastClockTicks           = DateTime.UtcNow.Ticks;
            lastRealTimeSinceStartup = 0f;

            dmpClient = this;
            profiler  = new Profiler();
            kspTime   = profiler.GetCurrentTime;
            kspMemory = profiler.GetCurrentMemory;

            dmpSettings       = new Settings();
            toolbarSupport    = new ToolbarSupport(dmpSettings);
            universeSyncCache = new UniverseSyncCache(dmpSettings);
            modWindow         = new ModWindow();
            modWorker         = new ModWorker(modWindow);
            modWindow.SetDependenices(modWorker);
            universeConverter          = new UniverseConverter(dmpSettings);
            universeConverterWindow    = new UniverseConverterWindow(universeConverter);
            serverListDisclaimerWindow = new ServerListDisclaimerWindow(dmpSettings);
            optionsWindow        = new OptionsWindow(dmpSettings, universeSyncCache, modWorker, universeConverterWindow, toolbarSupport, serverListDisclaimerWindow);
            serverListConnection = new ServerListConnection(dmpSettings);
            serversWindow        = new ServersWindow(dmpSettings, optionsWindow, serverListConnection);
            serverListConnection.SetDependancy(serversWindow);
            connectionWindow = new ConnectionWindow(dmpSettings, optionsWindow, serversWindow, serverListDisclaimerWindow);
            disclaimerWindow = new DisclaimerWindow(dmpSettings);
            dmpModInterface  = new DMPModInterface();
            //SafetyBubble.RegisterDefaultLocations();


            if (dmpSettings.disclaimerAccepted != 1)
            {
                modDisabled = true;
                disclaimerWindow.SpawnDialog();
            }

            Application.wantsToQuit += WantsToQuit;
            DontDestroyOnLoad(this);

            // Prevents symlink warning for development.
            SetupDirectoriesIfNeeded();

            // UniverseSyncCache needs to run expiry here
            universeSyncCache.ExpireCache();

            GameEvents.onHideUI.Add(() =>
            {
                showGUI = false;
            });
            GameEvents.onShowUI.Add(() =>
            {
                showGUI = true;
            });

            HandleCommandLineArgs();
            DarkLog.Debug("DarkMultiPlayer " + Common.PROGRAM_VERSION + ", protocol " + Common.PROTOCOL_VERSION + " Initialized!");
        }