public void WriteLine(string text, ConsoleColor?color = null) { var colorBefore = Console.ForegroundColor; if (color.HasValue) { Console.ForegroundColor = color.Value; } var lines = text.Split("\n"); foreach (var line in lines) { longestLine = Math.Max(longestLine, line.Length); BetterConsole.WriteAtLine(line, _currentLine + StartingLine, longestLine); _currentLine++; if (_currentLine >= Lines) { _currentLine = 0; } } if (color.HasValue) { Console.ForegroundColor = colorBefore; } }
protected override void ExecuteCmd(List <string> args) { if (!File.Exists(args[0])) { BetterConsole.WriteOnNextLine($"Grammar file does not exist.", ConsoleColor.Red); return; } if (!Directory.Exists(args[1])) { BetterConsole.WriteOnNextLine($"Output directory does not exist.", ConsoleColor.Red); return; } InterpreterCodeGenerator.LanguageName = args[2]; var results = DescriptionLanguageInterpreter.Execute(File.ReadAllText(args[0])); if (results.Item2.Count > 0) { BetterConsole.WriteOnNextLine($"Failure to load language: {string.Join("\n\n", results.Item2.Select(y => TreePrinter.ToString(y, z => z.SubErrors)))}", ConsoleColor.Red); } var fileContents = results.Item1.Cast <string>().ToArray(); File.WriteAllText(Path.Combine(args[1], $"{args[2]}Interpreter_NoEdit.cs"), fileContents[0]); File.WriteAllText(Path.Combine(args[1], $"{args[2]}Interpreter_Edit.cs"), fileContents[1]); File.WriteAllText(Path.Combine(args[1], "InterpreterSupport_NoEdit.cs"), fileContents[2]); }
private HeaderValue CreateValue(int valueWidth, string title, Func <Point, HeaderValue> createHeader) { var consolePositionBefore = BetterConsole.Position; var totalWidth = valueWidth + title.Length + 1; if (CurrentHeaderPointer.X + totalWidth > BetterConsole.Width) { ForceNewLine(); } Console.ForegroundColor = ConsoleManager.Skin.FramesColor; BetterConsole.WriteAt("|", CurrentHeaderPointer.X, CurrentHeaderPointer.Y); BetterConsole.WriteAt("|", CurrentHeaderPointer.X + totalWidth, CurrentHeaderPointer.Y); Console.ForegroundColor = ConsoleManager.Skin.HeaderLabelColor; BetterConsole.WriteAt(title, CurrentHeaderPointer.X + 1, CurrentHeaderPointer.Y); var p = new Point(CurrentHeaderPointer.X + title.Length, CurrentHeaderPointer.Y); var headerValue = createHeader(p); CurrentHeaderPointer = new Point(CurrentHeaderPointer.X + totalWidth, CurrentHeaderPointer.Y); BetterConsole.Position = consolePositionBefore; Console.ResetColor(); return(headerValue); }
private void Register(Client client, string[] parameters) { if (parameters.Length != 2) { client.DisplayString("Incorrect syntax. Use /register [username] [password]"); return; } if (client.Authenticated == true) { client.DisplayString("You are already logged in."); return; } var username = parameters[0]; var password = parameters[1]; var isRegisterSuccessful = ClientAuthenticator.Register(client, username, password); if (!isRegisterSuccessful) { client.DisplayString($"Username '{username}' already exists. Please choose another one."); return; } ClientAuthenticator.Authenticate(client, username, password); client.DisplayString($"Registered new user '{username}'. You are now logged in."); Server.GetServer().BroadcastMessage($"{username} has joined the chat."); BetterConsole.WriteLog($"New user registered: {username}"); }
static void Main(string[] args) { BetterConsole.WriteLog("Starting SpChat server..."); var server = Server.GetServer(); server.Start(Port); }
public void Update() { var p = BetterConsole.Position; Console.ForegroundColor = ConsoleManager.Skin.HeaderValueColor; if (HexMap != null) { for (int y = 0; y < Viewport.Height; y++) { var drawRow = ReverseY ? Viewport.Height - y - 1 : y; //BetterConsole.WriteAt(new string(' ', Viewport.Width), Viewport.X, drawRow + Viewport.Y); if (HexMap.YInBound(y + Offset.Y)) { var oddLine = y % 2 == 0; if (GetTileColor == null) { var line = ""; for (int x = 0; x < Viewport.Width / 2; x++) { if (HexMap.XInBound(x + Offset.X)) { line += _getTilePreview(HexMap[x + Offset.X, y + Offset.Y]); } else { line += EmptyChar; } } BetterConsole.WriteAt(line, Viewport.X, drawRow + Viewport.Y); } else { var oddOffset = -(y % 2); for (int col = 0; col < Viewport.Width / 2; col++) { if (HexMap.XInBound(col + Offset.X)) { var tile = HexMap[col + Offset.X, y + Offset.Y]; Console.ForegroundColor = GetTileColor(tile); BetterConsole.WriteAt(_getTilePreview(tile), 1 + oddOffset + col * 2 + Viewport.X, drawRow + Viewport.Y); } else { BetterConsole.WriteAt(EmptyChar, 1 + oddOffset + col * 2 + Viewport.X, drawRow + Viewport.Y); } } } } else { BetterConsole.WriteAt("", Viewport.X, drawRow + Viewport.Y); } } } Console.ResetColor(); BetterConsole.Position = p; }
public void BroadcastMessage(string message) { foreach (var client in Clients) { client.DisplayString(message); } BetterConsole.WriteLog($"Public chat: {message}"); }
public void Start(int port) { _serverSocket = new TcpListener(IPAddress.Any, port); _serverSocket.Start(); BetterConsole.WriteLog($"Initialized server socket on port {port}"); ListenForIncomingConnections(); }
public void Update() { var p = BetterConsole.Position; Console.ForegroundColor = ConsoleManager.Skin.HeaderValueColor; if (Grid != null) { for (int y = 0; y < GridPreviewHeight; y++) { if (Grid.YInBound(y + Offset.Y)) { if (GetTileColor == null) { var line = ""; for (int x = 0; x < GridPreviewWidth; x++) { if (Grid.XInBound(x + Offset.X)) { line += _getTilePreview(Grid[x + Offset.X, y + Offset.Y]); } else { line += EmptyChar; } } BetterConsole.WriteAt(line, Viewport.X, y + Viewport.Y); } else { for (int x = 0; x < GridPreviewWidth; x++) { if (Grid.XInBound(x + Offset.X)) { var tile = Grid[x + Offset.X, y + Offset.Y]; Console.ForegroundColor = GetTileColor(tile); BetterConsole.WriteAt(_getTilePreview(tile), x + Viewport.X, y + Viewport.Y); } else { BetterConsole.WriteAt(EmptyChar, x + Viewport.X, y + Viewport.Y); } } } } else { BetterConsole.WriteAt("", Viewport.X, y + Viewport.Y); } } } Console.ResetColor(); BetterConsole.Position = p; }
private void ListenForIncomingConnections() { while (true) { var clientSocket = _serverSocket.AcceptTcpClient(); BetterConsole.WriteLog($"New client connected."); var unauthenticatedClient = new Client(clientSocket); Clients.Add(unauthenticatedClient); } }
public Client(TcpClient clientSocket) { _clientSocket = clientSocket; var sslStream = new SslStream(clientSocket.GetStream(), false); sslStream.AuthenticateAsServer(Server.GetServer().Certificate, false, SslProtocols.Tls, true); Stream = new BinaryStream(sslStream); BetterConsole.WriteLog("Connection secured."); StartClientThread(); }
public void SaveDatabases() { try { BetterConsole.WriteLog("Saving database."); var json = JsonConvert.SerializeObject(this); File.WriteAllText(DatabaseFile, json); } catch (Exception) { BetterConsole.WriteLog("There was an error saving the database."); } }
private void DrawPlane() { System.Console.ForegroundColor = ConsoleColor.Gray; string row = new String('O', 128); for (var y = 0; y < 4; y++) { BetterConsole.WriteAt(row, PlaneOffset.X, PlaneOffset.Y + y); } for (var y = 4; y < 8; y++) { BetterConsole.WriteAt(row, PlaneOffset.X, PlaneOffset.Y + y + 2); } }
private void SendPrivateMessage(Client client, string[] parameters) { if (parameters.Length < 2) { client.DisplayString("Incorrect syntax. Use /pm [username] [message]"); return; } var username = parameters[0]; var message = new StringBuilder(); for (var i = 1; i < parameters.Length; i++) { if (i > 1) { message.Append(" "); } message.Append(parameters[i]); } if (username == client.User.Username) { client.DisplayString("You can't send private messages to yourself."); return; } if (!Server.GetServer().IsUserOnline(username)) { client.DisplayString($"The user '{username}' is not online. Can't deliver message."); return; } var chatMessage = new ChatMessage { FromUser = client.User.Username, ToUser = username, Message = message.ToString(), Time = DateTime.Now }; client.DisplayString($"To {chatMessage.ToUser}: {chatMessage.Message}"); Server.GetServer().GetUser(chatMessage.ToUser).DisplayString($"{chatMessage.FromUser} whispers: {chatMessage.Message}"); Database.GetDatabase().ChatMessages.Add(chatMessage); BetterConsole.WriteLog($"Private message sent: {client.User.Username} -> {username}"); }
public void SetTitle(int day, string title, int part) { Console.ForegroundColor = ConsoleManager.Skin.FramesColor; var line = new String('═', BetterConsole.Width - 2); var titleText = $" Day {day}: {title} - Part {part}".PadRight(BetterConsole.Width - 2); Console.ForegroundColor = ConsoleManager.Skin.FramesColor; BetterConsole.WriteAtLine($"╔{line}╗", 0); BetterConsole.WriteAtLine("║", 1); BetterConsole.WriteAt("║", BetterConsole.Width - 1, 1); BetterConsole.WriteAtLine($"╚{line}╝", 2); Console.ForegroundColor = ConsoleManager.Skin.DayTitleColor; BetterConsole.WriteAt(titleText, 1, 1); Console.ResetColor(); }
private static Database LoadDatabases() { if (File.Exists(DatabaseFile)) { try { BetterConsole.WriteLog("Loading database."); var json = File.ReadAllText(DatabaseFile); return(JsonConvert.DeserializeObject <Database>(json)); } catch (Exception) { BetterConsole.WriteLog("There was an error loading the database."); } } BetterConsole.WriteLog("Initializing new database."); return(new Database()); }
public void ReserveLines(int reserveLines) { CurrentHeaderPointer = new Point(0, ReservedLineStart); if (reserveLines == 0) { _reservedLines = 4; BetterConsole.Position = new Point(0, ReservedLineStart + reserveLines); } else { _reservedLines = reserveLines + 5; BetterConsole.Position = new Point(0, ReservedLineStart + reserveLines + 1); var line = new String('═', BetterConsole.Width); Console.ForegroundColor = ConsoleManager.Skin.FramesColor; BetterConsole.WriteAtLine(line, ReservedLineStart + reserveLines); Console.ResetColor(); } }
protected void WriteValue(string value) { var width = TotalWidth; var p = BetterConsole.Position; if (value.Length < width) { value = value.PadRight(width); } else if (value.Length > width) { value = value.ToString().Substring(0, width); } Console.ForegroundColor = ConsoleManager.Skin.HeaderValueColor; BetterConsole.WriteAt(value, Position.X, Position.Y); Console.ResetColor(); BetterConsole.Position = p; }
private void Login(Client client, string[] parameters) { if (parameters.Length != 2) { client.DisplayString("Incorrect syntax. Use /login [username] [password]"); return; } if (client.Authenticated == true) { client.DisplayString("You are already logged in."); return; } var username = parameters[0]; var password = parameters[1]; if (Server.GetServer().IsUserOnline(username)) { client.DisplayString("The user account is already in use."); return; } var isLoginSuccessful = ClientAuthenticator.Authenticate(client, username, password); if (!isLoginSuccessful) { client.DisplayString("Username and password do not match."); return; } client.DisplayString($"Logged in as {username}."); Server.GetServer().BroadcastMessage($"{username} has joined the chat."); BetterConsole.WriteLog($"{username} logged in."); }
private Plane GetPlane(string input) { var seats = new List <Point>(); var plane = new Plane(seats); var index = 0; var tickets = input.Split("\n"); foreach (var item in tickets) { if (_progress != null) { _progress.SetValue(++index / (float)tickets.Count()); } var seat = ParseSeat(item); plane.TakenSeats[seat.X, seat.Y] = true; var rowFirst = plane.FirstSeat[seat.Y]; var rowLast = plane.LastSeat[seat.Y]; var displayY = seat.Y; if (seat.Y >= 4) { displayY += 2; } var wasFirstOrLast = false; if (rowFirst > seat.X) { wasFirstOrLast = true; if (rowFirst <= 128 && rowLast != rowFirst) { SetColorForCol(seat.Y); BetterConsole.WriteAt('X', PlaneOffset.X + rowFirst, PlaneOffset.Y + displayY); } plane.FirstSeat[seat.Y] = seat.X; System.Console.ForegroundColor = ConsoleColor.Red; BetterConsole.WriteAt('X', PlaneOffset.X + seat.X, PlaneOffset.Y + displayY); } if (rowLast < seat.X) { wasFirstOrLast = true; if (rowLast >= 0 && rowLast != rowFirst) { SetColorForCol(seat.Y); BetterConsole.WriteAt('X', PlaneOffset.X + rowLast, PlaneOffset.Y + displayY); } plane.LastSeat[seat.Y] = seat.X; System.Console.ForegroundColor = ConsoleColor.Red; BetterConsole.WriteAt('X', PlaneOffset.X + seat.X, PlaneOffset.Y + displayY); } if (!wasFirstOrLast) { SetColorForCol(seat.Y); BetterConsole.WriteAt('X', PlaneOffset.X + seat.X, PlaneOffset.Y + displayY); } seats.Add(seat); } return(plane); }
public static void WriteAt(char c, int x, int y) => BetterConsole.WriteAt(c, x, y);
public static void WriteLineAt(string text, int line) => BetterConsole.WriteAtLine(text, line);