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();
}
// 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)

View File

@ -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<ChunkEventArgs> 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<IPacket>(new ConcurrentQueue<IPacket>());
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()

View File

@ -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();

View File

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

View File

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