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.
This commit is contained in:
Drew DeVault 2015-05-30 16:45:43 -06:00
parent 71ec7a7399
commit 5086565c41
7 changed files with 43 additions and 10 deletions

View File

@ -37,7 +37,7 @@ namespace TrueCraft.Client.Handlers
Process.GetCurrentProcess().Kill(); Process.GetCurrentProcess().Kill();
} }
// TODO: Authentication // 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) public static void HandleLoginResponse(IPacket _packet, MultiplayerClient client)

View File

@ -12,6 +12,7 @@ using TrueCraft.Core.Logic;
using TrueCraft.API.Entities; using TrueCraft.API.Entities;
using TrueCraft.API; using TrueCraft.API;
using System.ComponentModel; using System.ComponentModel;
using TrueCraft.Core;
namespace TrueCraft.Client namespace TrueCraft.Client
{ {
@ -25,6 +26,7 @@ namespace TrueCraft.Client
public event EventHandler<ChunkEventArgs> ChunkUnloaded; public event EventHandler<ChunkEventArgs> ChunkUnloaded;
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
public TrueCraftUser User { get; set; }
public ReadOnlyWorld World { get; private set; } public ReadOnlyWorld World { get; private set; }
public PhysicsEngine Physics { get; set; } public PhysicsEngine Physics { get; set; }
public bool LoggedIn { get; internal set; } public bool LoggedIn { get; internal set; }
@ -36,8 +38,9 @@ namespace TrueCraft.Client
private Thread NetworkWorker { get; set; } private Thread NetworkWorker { get; set; }
private readonly PacketHandler[] PacketHandlers; private readonly PacketHandler[] PacketHandlers;
public MultiplayerClient() public MultiplayerClient(TrueCraftUser user)
{ {
User = user;
Client = new TcpClient(); Client = new TcpClient();
PacketQueue = new BlockingCollection<IPacket>(new ConcurrentQueue<IPacket>()); PacketQueue = new BlockingCollection<IPacket>(new ConcurrentQueue<IPacket>());
PacketReader = new PacketReader(); PacketReader = new PacketReader();
@ -81,7 +84,7 @@ namespace TrueCraft.Client
Stream = new MinecraftStream(new BufferedStream(Client.GetStream())); Stream = new MinecraftStream(new BufferedStream(Client.GetStream()));
NetworkWorker.Start(); NetworkWorker.Start();
Physics.AddEntity(this); Physics.AddEntity(this);
QueuePacket(new HandshakePacket("TestUser")); // TODO: Get username from somewhere else QueuePacket(new HandshakePacket(User.Username));
} }
private void DoNetwork() private void DoNetwork()

View File

@ -2,6 +2,7 @@
using System.Net; using System.Net;
using System.Linq; using System.Linq;
using System.Net.Sockets; using System.Net.Sockets;
using TrueCraft.Core;
namespace TrueCraft.Client namespace TrueCraft.Client
{ {
@ -10,7 +11,8 @@ namespace TrueCraft.Client
[STAThread] [STAThread]
public static void Main(string[] args) 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])); var game = new TrueCraftGame(client, ParseEndPoint(args[0]));
game.Run(); game.Run();
client.Disconnect(); client.Disconnect();

View File

@ -26,10 +26,10 @@
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<ConsolePause>false</ConsolePause> <ConsolePause>false</ConsolePause>
<Commandlineparameters>play.truecraft.io</Commandlineparameters> <Commandlineparameters>play.truecraft.io SirCmpwn</Commandlineparameters>
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath> <BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
<StartAction>Project</StartAction> <StartAction>Project</StartAction>
<Optimize>false</Optimize> <Optimize>False</Optimize>
<DefineConstants>$(DefineConstants);WINDOWS</DefineConstants> <DefineConstants>$(DefineConstants);WINDOWS</DefineConstants>
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
</PropertyGroup> </PropertyGroup>

View File

@ -311,6 +311,7 @@
<Compile Include="Logic\Blocks\UprightSignBlock.cs" /> <Compile Include="Logic\Blocks\UprightSignBlock.cs" />
<Compile Include="TerrainGen\Decorators\LiquidDecorator.cs" /> <Compile Include="TerrainGen\Decorators\LiquidDecorator.cs" />
<Compile Include="Logic\BlockRepository.cs" /> <Compile Include="Logic\BlockRepository.cs" />
<Compile Include="TrueCraftUser.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup> <ItemGroup>

View File

@ -0,0 +1,9 @@
using System;
namespace TrueCraft.Core
{
public class TrueCraftUser
{
public string Username { get; set; }
}
}

View File

@ -11,31 +11,43 @@ namespace TrueCraft.Launcher
public ScrollView WebScrollView { get; set; } public ScrollView WebScrollView { get; set; }
public WebView WebView { get; set; } public WebView WebView { get; set; }
public VBox LoginContainer { get; set; } public VBox LoginContainer { get; set; }
public TextEntry UsernameText { get; set; }
public PasswordEntry PasswordText { get; set; }
public TextEntry ServerIPText { get; set; } public TextEntry ServerIPText { get; set; }
public Button LogInButton { get; set; } public Button LogInButton { get; set; }
public Button RegisterButton { get; set; }
public ImageView TrueCraftLogoImage { get; set; } public ImageView TrueCraftLogoImage { get; set; }
public LauncherWindow() public LauncherWindow()
{ {
this.Title = "TrueCraft Launcher"; this.Title = "TrueCraft Launcher";
this.Width = 1024; this.Width = 1200;
this.Height = 576; this.Height = 576;
MainContainer = new HBox(); MainContainer = new HBox();
WebScrollView = new ScrollView(); WebScrollView = new ScrollView();
WebView = new WebView("http://truecraft.io"); WebView = new WebView("http://truecraft.io/updates");
LoginContainer = new VBox(); LoginContainer = new VBox();
UsernameText = new TextEntry();
PasswordText = new PasswordEntry();
ServerIPText = new TextEntry(); ServerIPText = new TextEntry();
LogInButton = new Button("Log In"); LogInButton = new Button("Log In");
RegisterButton = new Button("Register");
TrueCraftLogoImage = new ImageView(Image.FromFile("Content/truecraft-logo.png")); TrueCraftLogoImage = new ImageView(Image.FromFile("Content/truecraft-logo.png"));
LoginContainer.MinWidth = 250; LoginContainer.MinWidth = 250;
ServerIPText.PlaceholderText = "Server address"; ServerIPText.PlaceholderText = "Server address";
UsernameText.PlaceholderText = "Username";
PasswordText.PlaceholderText = "Password";
RegisterButton.Clicked += (sender, e) => WebView.Url = "http://truecraft.io/register";
LogInButton.Clicked += HandleLogInClicked; LogInButton.Clicked += HandleLogInClicked;
LoginContainer.PackStart(TrueCraftLogoImage); LoginContainer.PackStart(TrueCraftLogoImage);
LoginContainer.PackEnd(RegisterButton);
LoginContainer.PackEnd(LogInButton); LoginContainer.PackEnd(LogInButton);
LoginContainer.PackEnd(ServerIPText); LoginContainer.PackEnd(ServerIPText);
LoginContainer.PackEnd(PasswordText);
LoginContainer.PackEnd(UsernameText);
WebScrollView.Content = WebView; WebScrollView.Content = WebView;
MainContainer.PackStart(WebScrollView, true); MainContainer.PackStart(WebScrollView, true);
MainContainer.PackEnd(LoginContainer); MainContainer.PackEnd(LoginContainer);
@ -45,11 +57,17 @@ namespace TrueCraft.Launcher
void HandleLogInClicked(object sender, EventArgs e) 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(); var process = new Process();
if (RuntimeInfo.IsMono) 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 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.EnableRaisingEvents = true;
process.Exited += (s, a) => Application.Invoke(ClientExited); process.Exited += (s, a) => Application.Invoke(ClientExited);
process.Start(); process.Start();