From 5086565c41f5cde675b610b2192d8b43bf0e274d Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 30 May 2015 16:45:43 -0600 Subject: [PATCH] Flesh out launcher some more The client now uses the username you provide during login in the launcher. Of note is that the actual login flow is not implemented - there is no authentication. --- TrueCraft.Client/Handlers/PacketHandlers.cs | 2 +- TrueCraft.Client/MultiplayerClient.cs | 7 ++++-- TrueCraft.Client/Program.cs | 4 +++- TrueCraft.Client/TrueCraft.Client.csproj | 4 ++-- TrueCraft.Core/TrueCraft.Core.csproj | 1 + TrueCraft.Core/TrueCraftUser.cs | 9 +++++++ TrueCraft.Launcher/LauncherWindow.cs | 26 +++++++++++++++++---- 7 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 TrueCraft.Core/TrueCraftUser.cs diff --git a/TrueCraft.Client/Handlers/PacketHandlers.cs b/TrueCraft.Client/Handlers/PacketHandlers.cs index bf7472d..d04b24f 100644 --- a/TrueCraft.Client/Handlers/PacketHandlers.cs +++ b/TrueCraft.Client/Handlers/PacketHandlers.cs @@ -37,7 +37,7 @@ namespace TrueCraft.Client.Handlers Process.GetCurrentProcess().Kill(); } // TODO: Authentication - client.QueuePacket(new LoginRequestPacket(PacketReader.Version, "TestUser")); + client.QueuePacket(new LoginRequestPacket(PacketReader.Version, client.User.Username)); } public static void HandleLoginResponse(IPacket _packet, MultiplayerClient client) diff --git a/TrueCraft.Client/MultiplayerClient.cs b/TrueCraft.Client/MultiplayerClient.cs index d6a77f8..f18f5ca 100644 --- a/TrueCraft.Client/MultiplayerClient.cs +++ b/TrueCraft.Client/MultiplayerClient.cs @@ -12,6 +12,7 @@ using TrueCraft.Core.Logic; using TrueCraft.API.Entities; using TrueCraft.API; using System.ComponentModel; +using TrueCraft.Core; namespace TrueCraft.Client { @@ -25,6 +26,7 @@ namespace TrueCraft.Client public event EventHandler ChunkUnloaded; public event PropertyChangedEventHandler PropertyChanged; + public TrueCraftUser User { get; set; } public ReadOnlyWorld World { get; private set; } public PhysicsEngine Physics { get; set; } public bool LoggedIn { get; internal set; } @@ -36,8 +38,9 @@ namespace TrueCraft.Client private Thread NetworkWorker { get; set; } private readonly PacketHandler[] PacketHandlers; - public MultiplayerClient() + public MultiplayerClient(TrueCraftUser user) { + User = user; Client = new TcpClient(); PacketQueue = new BlockingCollection(new ConcurrentQueue()); PacketReader = new PacketReader(); @@ -81,7 +84,7 @@ namespace TrueCraft.Client Stream = new MinecraftStream(new BufferedStream(Client.GetStream())); NetworkWorker.Start(); Physics.AddEntity(this); - QueuePacket(new HandshakePacket("TestUser")); // TODO: Get username from somewhere else + QueuePacket(new HandshakePacket(User.Username)); } private void DoNetwork() diff --git a/TrueCraft.Client/Program.cs b/TrueCraft.Client/Program.cs index 629c5f2..cf972bf 100644 --- a/TrueCraft.Client/Program.cs +++ b/TrueCraft.Client/Program.cs @@ -2,6 +2,7 @@ using System.Net; using System.Linq; using System.Net.Sockets; +using TrueCraft.Core; namespace TrueCraft.Client { @@ -10,7 +11,8 @@ namespace TrueCraft.Client [STAThread] public static void Main(string[] args) { - var client = new MultiplayerClient(); + var user = new TrueCraftUser { Username = args[1] }; + var client = new MultiplayerClient(user); var game = new TrueCraftGame(client, ParseEndPoint(args[0])); game.Run(); client.Disconnect(); diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj index 6b12e60..4b0beb8 100644 --- a/TrueCraft.Client/TrueCraft.Client.csproj +++ b/TrueCraft.Client/TrueCraft.Client.csproj @@ -26,10 +26,10 @@ true prompt false - play.truecraft.io + play.truecraft.io SirCmpwn obj\ Project - false + False $(DefineConstants);WINDOWS x86 diff --git a/TrueCraft.Core/TrueCraft.Core.csproj b/TrueCraft.Core/TrueCraft.Core.csproj index 0f95c9a..61cf6a0 100644 --- a/TrueCraft.Core/TrueCraft.Core.csproj +++ b/TrueCraft.Core/TrueCraft.Core.csproj @@ -311,6 +311,7 @@ + diff --git a/TrueCraft.Core/TrueCraftUser.cs b/TrueCraft.Core/TrueCraftUser.cs new file mode 100644 index 0000000..8e94a4f --- /dev/null +++ b/TrueCraft.Core/TrueCraftUser.cs @@ -0,0 +1,9 @@ +using System; + +namespace TrueCraft.Core +{ + public class TrueCraftUser + { + public string Username { get; set; } + } +} \ No newline at end of file diff --git a/TrueCraft.Launcher/LauncherWindow.cs b/TrueCraft.Launcher/LauncherWindow.cs index d899a7a..d2187e4 100644 --- a/TrueCraft.Launcher/LauncherWindow.cs +++ b/TrueCraft.Launcher/LauncherWindow.cs @@ -11,31 +11,43 @@ namespace TrueCraft.Launcher public ScrollView WebScrollView { get; set; } public WebView WebView { get; set; } public VBox LoginContainer { get; set; } + public TextEntry UsernameText { get; set; } + public PasswordEntry PasswordText { get; set; } public TextEntry ServerIPText { get; set; } public Button LogInButton { get; set; } + public Button RegisterButton { get; set; } public ImageView TrueCraftLogoImage { get; set; } public LauncherWindow() { this.Title = "TrueCraft Launcher"; - this.Width = 1024; + this.Width = 1200; this.Height = 576; MainContainer = new HBox(); WebScrollView = new ScrollView(); - WebView = new WebView("http://truecraft.io"); + WebView = new WebView("http://truecraft.io/updates"); LoginContainer = new VBox(); + UsernameText = new TextEntry(); + PasswordText = new PasswordEntry(); ServerIPText = new TextEntry(); LogInButton = new Button("Log In"); + RegisterButton = new Button("Register"); TrueCraftLogoImage = new ImageView(Image.FromFile("Content/truecraft-logo.png")); LoginContainer.MinWidth = 250; ServerIPText.PlaceholderText = "Server address"; + UsernameText.PlaceholderText = "Username"; + PasswordText.PlaceholderText = "Password"; + RegisterButton.Clicked += (sender, e) => WebView.Url = "http://truecraft.io/register"; LogInButton.Clicked += HandleLogInClicked; LoginContainer.PackStart(TrueCraftLogoImage); + LoginContainer.PackEnd(RegisterButton); LoginContainer.PackEnd(LogInButton); LoginContainer.PackEnd(ServerIPText); + LoginContainer.PackEnd(PasswordText); + LoginContainer.PackEnd(UsernameText); WebScrollView.Content = WebView; MainContainer.PackStart(WebScrollView, true); MainContainer.PackEnd(LoginContainer); @@ -45,11 +57,17 @@ namespace TrueCraft.Launcher void HandleLogInClicked(object sender, EventArgs e) { + if (string.IsNullOrEmpty(ServerIPText.Text) || + string.IsNullOrEmpty(UsernameText.Text)) + { + MessageDialog.ShowError("Username and server IP are required (for now)"); + return; + } var process = new Process(); if (RuntimeInfo.IsMono) - process.StartInfo = new ProcessStartInfo("mono", "TrueCraft.Client.exe " + ServerIPText.Text); + process.StartInfo = new ProcessStartInfo("mono", "TrueCraft.Client.exe " + ServerIPText.Text + " " + UsernameText.Text); else - process.StartInfo = new ProcessStartInfo("TrueCraft.Client.exe", ServerIPText.Text); + process.StartInfo = new ProcessStartInfo("TrueCraft.Client.exe", ServerIPText.Text + " " + UsernameText.Text); process.EnableRaisingEvents = true; process.Exited += (s, a) => Application.Invoke(ClientExited); process.Start();