This commit is contained in:
Yorick Rommers
2016-01-19 15:33:18 +01:00
parent 4d323d1c44
commit 0b2f333bab
3 changed files with 74 additions and 31 deletions
+1
View File
@@ -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);
+16 -14
View File
@@ -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<bool> Search()
{
return await SearchGame();
}
private async Task<bool> 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);
+57 -17
View File
@@ -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<bool> SearchGame()
public async Task<bool> 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<bool> 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<string> ReadData()
{
uint length = din.ReadUInt32();
string data = din.ReadString(length);
return data;
return din.ReadLine();
}
private async Task<bool> 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;