From 0b2f333bab1e40bc925c2b0ad02497128b531150 Mon Sep 17 00:00:00 2001 From: Yorick Rommers Date: Tue, 19 Jan 2016 15:33:18 +0100 Subject: [PATCH] shit --- YJMPD-UWP/Helpers/Settings.cs | 1 + YJMPD-UWP/Model/GameHandler.cs | 30 +++++++------ YJMPD-UWP/Model/NetworkHandler.cs | 74 ++++++++++++++++++++++++------- 3 files changed, 74 insertions(+), 31 deletions(-) diff --git a/YJMPD-UWP/Helpers/Settings.cs b/YJMPD-UWP/Helpers/Settings.cs index 95f22a6..bb490a6 100644 --- a/YJMPD-UWP/Helpers/Settings.cs +++ b/YJMPD-UWP/Helpers/Settings.cs @@ -14,6 +14,7 @@ namespace YJMPD_UWP.Helpers { //Define default settings here Values["hostname"] = "imegumii.space"; + Values["port"] = "3333"; if (Values["username"] == null) Values["username"] = "Anon_" + Util.Random(5, Util.RandomType.ALPHANUMERIC); diff --git a/YJMPD-UWP/Model/GameHandler.cs b/YJMPD-UWP/Model/GameHandler.cs index 5ef01d0..2e8efa6 100644 --- a/YJMPD-UWP/Model/GameHandler.cs +++ b/YJMPD-UWP/Model/GameHandler.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Threading.Tasks; +using Windows.Foundation; +using YJMPD_UWP.Helpers; using YJMPD_UWP.Helpers.EventArgs; using YJMPD_UWP.Model.Object; @@ -70,17 +73,9 @@ namespace YJMPD_UWP.Model //Searching public async Task Search() - { - return await SearchGame(); - } - - private async Task SearchGame() { UpdateGameStatus(GameStatus.SEARCHING); - - await App.Network.SearchGame(); - - return true; + return await App.Network.SearchGame(this, Settings.Username); } //Starting and Stopping @@ -101,15 +96,22 @@ namespace YJMPD_UWP.Model //Do stuff UpdateGameStatus(GameStatus.SEARCHING); + Search(); - await Task.Delay(TimeSpan.FromSeconds(2)); - AddPlayer("Kenneth"); - await Task.Delay(TimeSpan.FromSeconds(1)); - AddPlayer("Yorick"); + IAsyncAction asyncAction = Windows.System.Threading.ThreadPool.RunAsync((workItem) => + { + while (true) + { + App.Network.WaitingForPlayers(this); + + Debug.WriteLine("Searching"); + Task.Delay(TimeSpan.FromMilliseconds(50)); + } + }); + UpdateGameStatus(GameStatus.WAITING); - await Task.Delay(TimeSpan.FromSeconds(3)); UpdateGameStatus(GameStatus.STARTED); diff --git a/YJMPD-UWP/Model/NetworkHandler.cs b/YJMPD-UWP/Model/NetworkHandler.cs index c46fb04..8116205 100644 --- a/YJMPD-UWP/Model/NetworkHandler.cs +++ b/YJMPD-UWP/Model/NetworkHandler.cs @@ -5,11 +5,23 @@ using Windows.Networking.Sockets; using Windows.Storage.Streams; using YJMPD_UWP.Helpers; using YJMPD_UWP.Helpers.EventArgs; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using System.Diagnostics; +using System.IO; namespace YJMPD_UWP.Model { public class NetworkHandler { + + public enum Commands + { + Hi, + Name, + Picture + } + public delegate void OnStatusUpdatedHandler(object sender, NetworkStatusUpdatedEventArgs e); public event OnStatusUpdatedHandler OnStatusUpdate; @@ -18,7 +30,7 @@ namespace YJMPD_UWP.Model private StreamSocket client; DataWriter dout; - DataReader din; + StreamReader din; private void UpdateNetworkStatus(NetworkStatus status) { @@ -37,11 +49,44 @@ namespace YJMPD_UWP.Model //API stuff - public async Task SearchGame() + public async Task SearchGame(GameHandler g, string playername) { - Random r = new Random(); - int l = r.Next(0, 2); - return l < 1; + JObject obj = JObject.FromObject(new + { + command = Commands.Name.ToString(), + name = playername + }); + Debug.WriteLine(obj.ToString(Formatting.None)); + Write(obj.ToString(Formatting.None)); + + var response = await Read(); + Debug.WriteLine(response); + JObject o = JObject.Parse(response); + if(o["msg"].ToString() == "ok") + { + g.AddPlayer(playername); + return true; + } + + return false; + } + + public async Task WaitingForPlayers(GameHandler g) + { + bool added = false; + + var response = await Read(); + Debug.WriteLine(response); + JObject o = JObject.Parse(response); + try { + g.AddPlayer(o["player"].ToString()); + added = true; + } + catch(Exception e) + { + Debug.WriteLine(e); + } + return added; } @@ -58,17 +103,13 @@ namespace YJMPD_UWP.Model private async Task ReadData() { - uint length = din.ReadUInt32(); - string data = din.ReadString(length); - - return data; + return din.ReadLine(); } private async Task WriteData(string data) { - dout.WriteUInt32((uint)data.Length); - dout.WriteString(data); - + dout.WriteString(data + Environment.NewLine); + await dout.StoreAsync(); await dout.FlushAsync(); return true; @@ -91,21 +132,20 @@ namespace YJMPD_UWP.Model UpdateNetworkStatus(NetworkStatus.CONNECTING); UpdateNetworkStatus(NetworkStatus.CONNECTED); - return false; client = new StreamSocket(); StreamSocketControl controller = client.Control; controller.KeepAlive = true; - await client.ConnectAsync(new HostName(Settings.Values["hostname"] as string), "YJMPD-UWP-Server"); + await client.ConnectAsync(new HostName("imegumii.space"), "3333"); - din = new DataReader(client.InputStream); + din = new StreamReader(client.InputStream.AsStreamForRead()); dout = new DataWriter(client.OutputStream); - din.UnicodeEncoding = UnicodeEncoding.Utf8; - din.ByteOrder = ByteOrder.LittleEndian; + //din.UnicodeEncoding = UnicodeEncoding.Utf8; + //din.ByteOrder = ByteOrder.LittleEndian; dout.UnicodeEncoding = UnicodeEncoding.Utf8; dout.ByteOrder = ByteOrder.LittleEndian;