public void RemoveTestRemoveExistingActiveThreads() { ThreadCollection tc = new ThreadCollection(); GThreadMock threadToRemove1 = new GThreadMock(); GThreadMock threadToRemove2 = new GThreadMock(); GThreadMock threadToRemove3 = new GThreadMock(); GThreadMock threadToRemove4 = new GThreadMock(); tc.Add(threadToRemove1); tc.Add(threadToRemove2); tc.Add(threadToRemove3); tc.Add(threadToRemove4); Assert.AreEqual(4, tc.Count); threadToRemove1.SetState(ThreadState.Ready); threadToRemove2.SetState(ThreadState.Scheduled); threadToRemove3.SetState(ThreadState.Started); threadToRemove4.SetState(ThreadState.Unknown); tc.Remove(threadToRemove1); tc.Remove(threadToRemove2); tc.Remove(threadToRemove3); tc.Remove(threadToRemove4); // the thread should not have been removed // this remove function only allows the removal of Dead or Finished threads Assert.AreEqual(4, tc.Count); }
public void Start() { try { // Before Running CheckList if (!My.Computer.Network.IsAvailable) { Core.Logger.Log("Network is not available.", Logger.LogTypes.Warning); Dispose(); } else { // Threading Thread Thread = new Thread(new System.Threading.ThreadStart(CheckListener)) { IsBackground = true }; Thread.Start(); ThreadCollection.Add(Thread); StartListen(); var UpdateCycle = new Thread(Update); UpdateCycle.Start(); ThreadCollection.Add(UpdateCycle); IsActive = true; } } catch (Exception ex) { ex.CatchError(); Dispose(); } }
/// <summary> /// Starts listening for incoming connection requests. /// </summary> public void Start() { try { // Before Running CheckList if (!My.Computer.Network.IsAvailable) { Core.Logger.Log("Network is not available.", Logger.LogTypes.Warning); Dispose(); } else { IPEndPoint = new IPEndPoint(IPAddress.Any, Core.Setting.RCONPort); TcpListener = new TcpListener(IPEndPoint); TcpListener.Start(); IsActive = true; // Threading Thread Thread = new Thread(new ThreadStart(ThreadStartListening)) { IsBackground = true }; Thread.Start(); ThreadCollection.Add(Thread); } } catch (Exception) { Dispose(); } }
/// <summary> /// New Networking /// </summary> /// <param name="Client">Client</param> public Networking(TcpClient Client) { // Set Client Property. this.Client = Client; IsActive = true; Reader = new StreamReader(Client.GetStream()); Writer = new StreamWriter(Client.GetStream()); LastValidPing = DateTime.Now; LastValidMovement = DateTime.Now; Thread Thread = new Thread(new ThreadStart(ThreadStartListening)) { IsBackground = true }; Thread.Start(); ThreadCollection.Add(Thread); Thread Thread2 = new Thread(new ThreadStart(ThreadStartPinging)) { IsBackground = true }; Thread2.Start(); ThreadCollection.Add(Thread2); }
/// <summary> /// Starts listening for incoming connection requests. /// </summary> public void Start() { try { // Before Running CheckList if (!My.Computer.Network.IsAvailable) { Core.Logger.Log("Network is not available.", Logger.LogTypes.Warning); Dispose(); } else { TcpListener = new TcpListener(new IPEndPoint(IPAddress.Any, Core.Setting.Port)); TcpListener.Start(); IsActive = true; // Threading ThreadCollection.Add(new ThreadStart(ThreadStartListening)); ThreadCollection.Add(new ThreadStart(Core.World.Update)); if (Core.Setting.AutoRestartTime >= 10) { Core.Logger.Log($"The server will restart every {Core.Setting.AutoRestartTime.ToString()} seconds.", Logger.LogTypes.Info); ThreadCollection.Add(new ThreadStart(ThreadAutoRestart)); } } } catch (Exception ex) { ex.CatchError(); Dispose(); } }
/// <summary> /// New Networking /// </summary> /// <param name="IPAddress">IPAddress</param> /// <param name="Password">Password</param> /// <param name="Port">Port</param> public Listener(string IPAddress, string Password, int Port) { this.IPAddress = IPAddress; this.Password = Password; this.Port = Port; Thread Thread = new Thread(new ThreadStart(ThreadStartListening)) { IsBackground = true }; Thread.Start(); ThreadCollection.Add(Thread); }
/// <summary> /// Handle Package /// </summary> /// <param name="p">Package</param> public void HandlePackage(Package p) { if (p.PackageType == (int)Package.PackageTypes.BeginDownloadFile) { if (p.DataItems[1].ToInt() == 1) { Writer = new StreamWriter(Stream); Thread Thread = new Thread(new ThreadStart(GetDownloadSpeed)) { IsBackground = true }; Thread.Start(); ThreadCollection.Add(Thread); } Download(p); } else if (p.PackageType == (int)Package.PackageTypes.EndDownloadFile) { if (CurrentBytes_L == TotalBytes_L) { Status = DownloadStatus.Completed.ToString(); Speed = "0 B/s"; } else if (CurrentBytes_L - Encoding.UTF8.GetByteCount(Environment.NewLine.ToCharArray()) == TotalBytes_L) { Status = DownloadStatus.Completed.ToString(); Speed = "0 B/s"; } else { Status = DownloadStatus.Canceled.ToString(); } Writer.Dispose(); Core.RCONGUIListener.SentToServer(new Package(Package.PackageTypes.EndDownloadFile, new List <string> { ID.ToString(), Package.EndDownloadFileStatus.DownloadStreamDisposed.ToString() }, null)); } else if (p.PackageType == (int)Package.PackageTypes.EndCreateFile) { Stream.Dispose(); Core.RCONGUIListener.SentToServer(new Package(Package.PackageTypes.EndCreateFile, new List <string> { ID.ToString(), Package.EndCreateFileStatus.FileStreamDisposed.ToString() }, null)); } }
public void RemoveTestRemoveExistingDeadOrFinishedThread() { ThreadCollection tc = new ThreadCollection(); GThreadMock threadToRemove1 = new GThreadMock(); GThreadMock threadToRemove2 = new GThreadMock(); tc.Add(threadToRemove1); tc.Add(threadToRemove2); Assert.AreEqual(2, tc.Count); threadToRemove1.SetState(ThreadState.Dead); threadToRemove2.SetState(ThreadState.Finished); tc.Remove(threadToRemove1); // the thread should have been removed Assert.AreEqual(1, tc.Count); tc.Remove(threadToRemove2); // the thread should have been removed Assert.AreEqual(0, tc.Count); }
private void StartThread(ThreadItem task) { _threads.Add(task); BackgroundWorker thread = new BackgroundWorker(); thread.DoWork += delegate { task.Invoke(); }; thread.RunWorkerCompleted += delegate { _threads.Remove(task); CheckQueue(); if (_queue.Count == 0 && _threads.Count == 0 && RaiseCompleteEventIfQueueEmpty) { OnCompleted(); } }; thread.RunWorkerAsync(); }
private void ThreadStartListening() { if (Core.Setting.OfflineMode) { Core.Logger.Log("Players with offline profile can join the server.", Logger.LogTypes.Info); } string GameMode = null; for (int i = 0; i < Core.Setting.GameMode.Count; i++) { GameMode += Core.Setting.GameMode[i] + ", "; } GameMode = GameMode.Remove(GameMode.LastIndexOf(",")); if (Functions.CheckPortOpen(Core.Setting.Port)) { Core.Logger.Log($"Server started. Players can join using the following address: {Core.Setting.IPAddress}:{Core.Setting.Port.ToString()} (Global), {Functions.GetPrivateIP()}:{Core.Setting.Port.ToString()} (Local) and with the following GameMode: {GameMode}.", Logger.LogTypes.Info); ThreadCollection.Add(new ThreadStart(ThreadPortCheck)); } else { Core.Logger.Log($"The specific port {Core.Setting.Port.ToString()} is not opened. External/Global IP will not accept new players.", Logger.LogTypes.Info); Core.Logger.Log($"Server started. Players can join using the following address: {Functions.GetPrivateIP()}:{Core.Setting.Port.ToString()} (Local) and with the following GameMode: {GameMode}.", Logger.LogTypes.Info); } Core.Logger.Log("Pokémon 3D Listener initialized.", Logger.LogTypes.Info); do { try { ThreadPool.QueueWorkItem(new Action <TcpClient>(ThreadAcceptTcpClient), TcpListener.AcceptTcpClient()); } catch (ThreadAbortException) { return; } catch (Exception) { } } while (IsActive); }
private void ThreadStartListening() { try { Core.Logger.Log($"Connecting to the specified server... Please wait.", Logger.LogTypes.Info); Client = new TcpClient(); if (!Client.ConnectAsync(IPAddress, Port).Wait(5000)) { Core.Logger.Log(Core.Setting.Token("RCON_CONNECTFAILED"), Logger.LogTypes.Info); return; } Reader = new StreamReader(Client.GetStream()); Writer = new StreamWriter(Client.GetStream()); SentToServer(new Package(Package.PackageTypes.Authentication, new List <string> { Password.Md5HashGenerator(), Password.SHA1HashGenerator(), Password.SHA256HashGenerator() }, null)); string ReturnMessage = Reader.ReadLine(); if (string.IsNullOrEmpty(ReturnMessage)) { Core.Logger.Log(Core.Setting.Token("RCON_CONNECTFAILED"), Logger.LogTypes.Info); return; } else { Package Package = new Package(ReturnMessage, Client); if (Package.IsValid) { Core.Logger.Log($"Receive: {Package.ToString()}", Logger.LogTypes.Debug, Client); if (Package.DataItems[0] == Package.AuthenticationStatus.AccessGranted.ToString()) { Core.Logger.Log($"You are now connected to the server.", Logger.LogTypes.Info); IsActive = true; } else if (Package.DataItems[0] == Package.AuthenticationStatus.AccessDenied.ToString()) { Core.Logger.Log(Core.Setting.Token("RCON_CONNECTFAILED"), Logger.LogTypes.Info); return; } } else { Core.Logger.Log(Core.Setting.Token("RCON_CONNECTFAILED"), Logger.LogTypes.Info); return; } } } catch (Exception ex) { ex.CatchError(); Core.Logger.Log(Core.Setting.Token("RCON_CONNECTFAILED"), Logger.LogTypes.Info); return; } Thread Thread2 = new Thread(new ThreadStart(ThreadStartPinging)) { IsBackground = true }; Thread2.Start(); ThreadCollection.Add(Thread2); do { try { ThreadPool.QueueWorkItem(new WorkItemCallback(ThreadPreHandlePackage), Reader.ReadLine()); } catch (Exception) { } } while (IsActive); }