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("[N]ew Game");
|
||||
Console.WriteLine("[S]tart Game");
|
||||
Console.WriteLine("[O] Start Online Game");
|
||||
Console.WriteLine("[E]nd");
|
||||
|
||||
char input = GetCharInput(new[] { 'c', 's', 'e', 'n', 'o' });
|
||||
@@ -47,19 +48,7 @@ namespace TicTacToe
|
||||
ticTacToe = new TicTacToe();
|
||||
break;
|
||||
case 'o':
|
||||
string hosting = Console.ReadLine();
|
||||
var test = new TicTacToeOnline();
|
||||
if (hosting == "t")
|
||||
{
|
||||
test.IsServer(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
test.IsServer(false);
|
||||
}
|
||||
|
||||
test.StartGame();
|
||||
|
||||
StartOnlineGame();
|
||||
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)
|
||||
{
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace TicTacToe
|
||||
}
|
||||
|
||||
//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)
|
||||
{
|
||||
|
||||
@@ -12,7 +12,9 @@ namespace TicTacToe
|
||||
private bool _isServer = false;
|
||||
private int _port = 6969;
|
||||
private string _ipAddress = "127.0.0.1";
|
||||
private Socket _client;
|
||||
private NetworkStream _stream;
|
||||
private TcpClient _client;
|
||||
private TcpListener _listener;
|
||||
|
||||
private int _clientPlayerId = -1;
|
||||
|
||||
@@ -28,6 +30,25 @@ namespace TicTacToe
|
||||
_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()
|
||||
{
|
||||
if (_isServer)
|
||||
@@ -86,45 +107,27 @@ namespace TicTacToe
|
||||
|
||||
private void SendData(string data)
|
||||
{
|
||||
data += "<EOF>";
|
||||
Console.WriteLine("Sending Data: " + data);
|
||||
byte[] bytes = Encoding.ASCII.GetBytes(data);
|
||||
_client.Send(bytes);
|
||||
Console.WriteLine("Sending data");
|
||||
Console.WriteLine("Data: " + data);
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(data);
|
||||
_stream.Write(bytes, 0, bytes.Length);
|
||||
}
|
||||
|
||||
private string ReceiveData()
|
||||
{
|
||||
string data = null;
|
||||
byte[] bytes = null;
|
||||
|
||||
Console.WriteLine("Receiving Data");
|
||||
byte[] bytes = new byte[_client.ReceiveBufferSize];
|
||||
int bytesRead = _stream.Read(bytes, 0, _client.ReceiveBufferSize);
|
||||
|
||||
while (true)
|
||||
{
|
||||
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");
|
||||
|
||||
string data = Encoding.UTF8.GetString(bytes);
|
||||
Console.WriteLine("Data: " + data);
|
||||
return data;
|
||||
}
|
||||
|
||||
private void ConnectToServer()
|
||||
{
|
||||
IPHostEntry host = Dns.GetHostEntry(_ipAddress);
|
||||
IPAddress ipAddress = host.AddressList[0];
|
||||
IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, _port);
|
||||
|
||||
_client = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
||||
|
||||
_client.Connect(remoteEndPoint);
|
||||
_client = new TcpClient(_ipAddress, _port);
|
||||
_stream = _client.GetStream();
|
||||
|
||||
Console.WriteLine("connected");
|
||||
|
||||
@@ -143,17 +146,14 @@ namespace TicTacToe
|
||||
|
||||
private void StartServer()
|
||||
{
|
||||
IPHostEntry host = Dns.GetHostEntry(_ipAddress);
|
||||
IPAddress ipAddress = host.AddressList[0];
|
||||
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();
|
||||
_listener = new TcpListener(IPAddress.Any, _port);
|
||||
_listener.Start();
|
||||
|
||||
_client = _listener.AcceptTcpClient();
|
||||
Console.WriteLine("A Client connected");
|
||||
|
||||
_stream = _client.GetStream();
|
||||
|
||||
var player = new HumanPlayer("Server", FieldState.PlayerX);
|
||||
AddPlayer(player);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user