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); } }
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(); }
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!"); }