Added online Play over TCP and updated UI to reflect that
Signed-off-by: Pablu23 <43807157+Pablu23@users.noreply.github.com>
This commit is contained in:
@@ -22,6 +22,7 @@ namespace TicTacToe
|
|||||||
Console.WriteLine("[C]onfig Players");
|
Console.WriteLine("[C]onfig Players");
|
||||||
//Console.WriteLine("[N]ew Game");
|
//Console.WriteLine("[N]ew Game");
|
||||||
Console.WriteLine("[S]tart Game");
|
Console.WriteLine("[S]tart Game");
|
||||||
|
Console.WriteLine("[O] Start Online Game");
|
||||||
Console.WriteLine("[E]nd");
|
Console.WriteLine("[E]nd");
|
||||||
|
|
||||||
char input = GetCharInput(new[] { 'c', 's', 'e', 'n', 'o' });
|
char input = GetCharInput(new[] { 'c', 's', 'e', 'n', 'o' });
|
||||||
@@ -47,19 +48,7 @@ namespace TicTacToe
|
|||||||
ticTacToe = new TicTacToe();
|
ticTacToe = new TicTacToe();
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
string hosting = Console.ReadLine();
|
StartOnlineGame();
|
||||||
var test = new TicTacToeOnline();
|
|
||||||
if (hosting == "t")
|
|
||||||
{
|
|
||||||
test.IsServer(true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
test.IsServer(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
test.StartGame();
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +57,30 @@ namespace TicTacToe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void StartOnlineGame()
|
||||||
|
{
|
||||||
|
Console.Clear();
|
||||||
|
var ticTacToeOnline = new TicTacToeOnline();
|
||||||
|
Console.WriteLine("Is this PC Hosting?");
|
||||||
|
Console.WriteLine("[Y]es");
|
||||||
|
Console.WriteLine("[N]o");
|
||||||
|
string hosting = Console.ReadLine();
|
||||||
|
|
||||||
|
if (hosting.ToLower() == "y")
|
||||||
|
{
|
||||||
|
ticTacToeOnline.IsServer(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ticTacToeOnline.IsServer(false);
|
||||||
|
Console.WriteLine("On which IP Address should be connected?");
|
||||||
|
string ip = Console.ReadLine();
|
||||||
|
ticTacToeOnline.SetIpAddress(ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
ticTacToeOnline.StartGame();
|
||||||
|
}
|
||||||
|
|
||||||
private static void ConfigPlayers(TicTacToe ticTacToe)
|
private static void ConfigPlayers(TicTacToe ticTacToe)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ namespace TicTacToe
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Do CleanUp for every Player (Mostly needed for LearningAi to update the brain)
|
//Do CleanUp for every Player (Mostly needed for LearningAi to update the brain)
|
||||||
private void CleanUp()
|
protected virtual void CleanUp()
|
||||||
{
|
{
|
||||||
foreach (var player in Players)
|
foreach (var player in Players)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ namespace TicTacToe
|
|||||||
private bool _isServer = false;
|
private bool _isServer = false;
|
||||||
private int _port = 6969;
|
private int _port = 6969;
|
||||||
private string _ipAddress = "127.0.0.1";
|
private string _ipAddress = "127.0.0.1";
|
||||||
private Socket _client;
|
private NetworkStream _stream;
|
||||||
|
private TcpClient _client;
|
||||||
|
private TcpListener _listener;
|
||||||
|
|
||||||
private int _clientPlayerId = -1;
|
private int _clientPlayerId = -1;
|
||||||
|
|
||||||
@@ -28,6 +30,25 @@ namespace TicTacToe
|
|||||||
_isServer = x;
|
_isServer = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetIpAddress(string ip)
|
||||||
|
{
|
||||||
|
_ipAddress = ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void CleanUp()
|
||||||
|
{
|
||||||
|
foreach (var player in Players)
|
||||||
|
{
|
||||||
|
player.CleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
_client.Close();
|
||||||
|
if (_isServer)
|
||||||
|
{
|
||||||
|
_listener.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void StartGame()
|
public override void StartGame()
|
||||||
{
|
{
|
||||||
if (_isServer)
|
if (_isServer)
|
||||||
@@ -86,45 +107,27 @@ namespace TicTacToe
|
|||||||
|
|
||||||
private void SendData(string data)
|
private void SendData(string data)
|
||||||
{
|
{
|
||||||
data += "<EOF>";
|
Console.WriteLine("Sending data");
|
||||||
Console.WriteLine("Sending Data: " + data);
|
Console.WriteLine("Data: " + data);
|
||||||
byte[] bytes = Encoding.ASCII.GetBytes(data);
|
byte[] bytes = Encoding.UTF8.GetBytes(data);
|
||||||
_client.Send(bytes);
|
_stream.Write(bytes, 0, bytes.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string ReceiveData()
|
private string ReceiveData()
|
||||||
{
|
{
|
||||||
string data = null;
|
|
||||||
byte[] bytes = null;
|
|
||||||
|
|
||||||
Console.WriteLine("Receiving Data");
|
Console.WriteLine("Receiving Data");
|
||||||
|
byte[] bytes = new byte[_client.ReceiveBufferSize];
|
||||||
|
int bytesRead = _stream.Read(bytes, 0, _client.ReceiveBufferSize);
|
||||||
|
|
||||||
while (true)
|
string data = Encoding.UTF8.GetString(bytes);
|
||||||
{
|
|
||||||
bytes = new byte[1024];
|
|
||||||
int bytesRec = _client.Receive(bytes);
|
|
||||||
data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
|
|
||||||
Console.WriteLine("Data: " + data);
|
Console.WriteLine("Data: " + data);
|
||||||
if (data.IndexOf("<EOF>") > -1)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine("Data Received, returning");
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ConnectToServer()
|
private void ConnectToServer()
|
||||||
{
|
{
|
||||||
IPHostEntry host = Dns.GetHostEntry(_ipAddress);
|
_client = new TcpClient(_ipAddress, _port);
|
||||||
IPAddress ipAddress = host.AddressList[0];
|
_stream = _client.GetStream();
|
||||||
IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, _port);
|
|
||||||
|
|
||||||
_client = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
|
||||||
|
|
||||||
_client.Connect(remoteEndPoint);
|
|
||||||
|
|
||||||
Console.WriteLine("connected");
|
Console.WriteLine("connected");
|
||||||
|
|
||||||
@@ -143,17 +146,14 @@ namespace TicTacToe
|
|||||||
|
|
||||||
private void StartServer()
|
private void StartServer()
|
||||||
{
|
{
|
||||||
IPHostEntry host = Dns.GetHostEntry(_ipAddress);
|
_listener = new TcpListener(IPAddress.Any, _port);
|
||||||
IPAddress ipAddress = host.AddressList[0];
|
_listener.Start();
|
||||||
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, _port);
|
|
||||||
Socket server = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
|
||||||
server.Bind(localEndPoint);
|
|
||||||
server.Listen(1);
|
|
||||||
|
|
||||||
_client = server.Accept();
|
|
||||||
|
|
||||||
|
_client = _listener.AcceptTcpClient();
|
||||||
Console.WriteLine("A Client connected");
|
Console.WriteLine("A Client connected");
|
||||||
|
|
||||||
|
_stream = _client.GetStream();
|
||||||
|
|
||||||
var player = new HumanPlayer("Server", FieldState.PlayerX);
|
var player = new HumanPlayer("Server", FieldState.PlayerX);
|
||||||
AddPlayer(player);
|
AddPlayer(player);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user