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:
Pablu23
2021-11-27 13:54:54 +01:00
parent 876a593115
commit f5c88435cb
3 changed files with 67 additions and 54 deletions

View File

@@ -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)
{ {

View File

@@ -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)
{ {

View File

@@ -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);
{ Console.WriteLine("Data: " + data);
bytes = new byte[1024];
int bytesRec = _client.Receive(bytes);
data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
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);