private void HandleAuthentication(Package p) { if (string.Equals(p.DataItems[0], Core.Setting.RCONPassword.Md5HashGenerator(), StringComparison.OrdinalIgnoreCase) && string.Equals(p.DataItems[1], Core.Setting.RCONPassword.SHA1HashGenerator(), StringComparison.OrdinalIgnoreCase) && string.Equals(p.DataItems[2], Core.Setting.RCONPassword.SHA256HashGenerator(), StringComparison.OrdinalIgnoreCase)) { Core.RCONPlayer.Add(p); } else { Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.Authentication, Package.AuthenticationStatus.AccessDenied.ToString(), p.Client)); } }
/// <summary> /// New Player (Update Player) /// </summary> /// <param name="p">Package</param> /// <param name="ID">Player ID</param> public Player(Package p, int ID) { this.ID = ID; Network = new Networking(p.Client); Core.RCONPlayer.Add(this); Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.Authentication, Package.AuthenticationStatus.AccessGranted.ToString(), p.Client)); Core.Logger.Log($"RCON Player (ID: {ID.ToString()}) have connected.", Logger.LogTypes.Info, p.Client); for (int i = 0; i < Core.Player.Count; i++) { Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.AddPlayer, $"{Core.Player[i].ID},{Core.Player[i].ToString()}", p.Client)); } }
/// <summary> /// Handle PackageData /// </summary> /// <param name="p">Package</param> public void Handle(Package p) { try { switch (p.PackageType) { case (int)Package.PackageTypes.Unknown: Core.Logger.Log("Unable to handle the package due to unknown type.", Logger.LogTypes.Debug, p.Client); break; case (int)Package.PackageTypes.Authentication: HandleAuthentication(p); break; case (int)Package.PackageTypes.Ping: HandlePing(p); break; case (int)Package.PackageTypes.Kick: case (int)Package.PackageTypes.AddPlayer: case (int)Package.PackageTypes.UpdatePlayer: case (int)Package.PackageTypes.RemovePlayer: Core.Logger.Log("Unable to handle this package as it is not getable.", Logger.LogTypes.Debug, p.Client); break; case (int)Package.PackageTypes.Logger: HandleLogger(p); break; case (int)Package.PackageTypes.GetAllCrashLogs: case (int)Package.PackageTypes.GetAllLogs: case (int)Package.PackageTypes.BeginCreateFile: case (int)Package.PackageTypes.BeginDownloadFile: case (int)Package.PackageTypes.EndDownloadFile: case (int)Package.PackageTypes.EndCreateFile: Core.RCONUploadQueue.HandlePackage(p); break; default: Core.Logger.Log("Unable to handle the package due to unknown type.", Logger.LogTypes.Debug, p.Client); break; } } catch (Exception ex) { ex.CatchError(); } }
private object ThreadHandlePackage(object obj) { try { string ReturnMessage = (string)obj; if (!string.IsNullOrWhiteSpace(ReturnMessage)) { Package Package = new Package(ReturnMessage, Client); Core.Logger.Log($"Receive: {ReturnMessage}", Logger.LogTypes.Debug, Client); if (Package.IsValid) { Package.Handle(); } } } catch (Exception) { } return null; }
/// <summary> /// Handle Package /// </summary> /// <param name="p">Package</param> public void HandlePackage(Package p) { if (p.PackageType == (int)Package.PackageTypes.BeginCreateFile) { if (p.DataItems[1] == Package.BeginCreateFileStatus.FileCreated.ToString()) { Reader = new StreamReader(Stream); Upload(); } else if (p.DataItems[1] == Package.BeginCreateFileStatus.FileExisted.ToString()) { Stream.Dispose(); Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.EndCreateFile, FileID.ToString(), Client)); } else if (p.DataItems[1] == Package.BeginCreateFileStatus.Failed.ToString()) { Stream.Dispose(); Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.EndCreateFile, FileID.ToString(), Client)); } } else if (p.PackageType == (int)Package.PackageTypes.BeginDownloadFile) { if (p.DataItems[1] == Package.BeginDownloadFileStatus.RequestNextLine.ToString()) { Upload(); } else if (p.DataItems[1] == Package.BeginDownloadFileStatus.Pause.ToString()) { // Do nothing, just pause here. } else if (p.DataItems[1] == Package.BeginDownloadFileStatus.Cancel.ToString()) { Reader.Dispose(); Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.EndDownloadFile, FileID.ToString(), Client)); } } else if (p.PackageType == (int)Package.PackageTypes.EndDownloadFile) { if (p.DataItems[1] == Package.EndDownloadFileStatus.DownloadStreamDisposed.ToString()) { Stream.Dispose(); Core.RCONPlayer.SentToPlayer(new Package(Package.PackageTypes.EndCreateFile, FileID.ToString(), Client)); } } else if (p.PackageType == (int)Package.PackageTypes.EndCreateFile) { if (p.DataItems[1] == Package.EndCreateFileStatus.FileStreamDisposed.ToString()) { Core.RCONUploadQueue.Remove(this); } } }
private object ThreadPreHandlePackage(object p) { if (string.IsNullOrEmpty((string)p)) { if (IsActive) { IsActive = false; Core.RCONPlayer.Remove(Client, "You have left the server."); } } else { Package Package = new Package((string)p, Client); if (Package.IsValid) { LastValidPing = DateTime.Now; ThreadPool2.QueueWorkItem(new WorkItemCallback(ThreadHandlePackage), Package); Core.Logger.Log($"Receive: {Package.ToString()}", Logger.LogTypes.Debug, Client); } } return null; }
/// <summary> /// Sent To Player /// </summary> /// <param name="p">Package to send.</param> public void SentToPlayer(Package p) { ThreadPool3.QueueWorkItem(new WorkItemCallback(ThreadSentToPlayer), p); }
private void HandleLogger(Package p) { Core.Command.HandleAllCommand(new Server_Client_Listener.Packages.Package(Server_Client_Listener.Packages.Package.PackageTypes.ChatMessage, p.DataItems[0], null)); }
private void HandlePing(Package p) { Player Player = Core.RCONPlayer.GetPlayer(p.Client); Player.Network.LastValidPing = DateTime.Now; }