Example #1
0
    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]);
        }
Example #3
0
    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);
    }
Example #4
0
        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}");
        }
Example #5
0
        static void Main(string[] args)
        {
            BetterConsole.WriteLog("Starting SpChat server...");
            var server = Server.GetServer();

            server.Start(Port);
        }
Example #6
0
    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;
    }
Example #7
0
        public void BroadcastMessage(string message)
        {
            foreach (var client in Clients)
            {
                client.DisplayString(message);
            }

            BetterConsole.WriteLog($"Public chat: {message}");
        }
Example #8
0
        public void Start(int port)
        {
            _serverSocket = new TcpListener(IPAddress.Any, port);
            _serverSocket.Start();

            BetterConsole.WriteLog($"Initialized server socket on port {port}");

            ListenForIncomingConnections();
        }
Example #9
0
    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;
    }
Example #10
0
        private void ListenForIncomingConnections()
        {
            while (true)
            {
                var clientSocket = _serverSocket.AcceptTcpClient();
                BetterConsole.WriteLog($"New client connected.");
                var unauthenticatedClient = new Client(clientSocket);

                Clients.Add(unauthenticatedClient);
            }
        }
Example #11
0
        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();
        }
Example #12
0
 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.");
     }
 }
Example #13
0
    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);
        }
    }
Example #14
0
        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}");
        }
Example #15
0
    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();
    }
Example #16
0
        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());
        }
Example #17
0
    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();
        }
    }
Example #18
0
    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;
    }
Example #19
0
        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.");
        }
Example #20
0
    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);
    }
Example #21
0
 public static void WriteAt(char c, int x, int y) => BetterConsole.WriteAt(c, x, y);
Example #22
0
 public static void WriteLineAt(string text, int line) => BetterConsole.WriteAtLine(text, line);