80 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace TetrisRPS
{
class GameNetwork
{
TcpListener? tcpListener;
TcpClient? tcpClient;
NetworkStream? networkStream;
public GameNetwork() { }
public void StartListener()
{
tcpListener = new TcpListener(IPAddress.Any, 8000);
tcpListener.Start();
tcpClient = tcpListener.AcceptTcpClient();
networkStream = tcpClient.GetStream();
}
public void StopListener()
{
networkStream?.Close();
tcpClient?.Close();
tcpListener?.Stop();
}
public void StartClient(string ip)
{
tcpClient = new TcpClient(ip, 8000);
networkStream = tcpClient.GetStream();
}
public void StopClient()
{
networkStream?.Close();
tcpClient?.Close();
}
public delegate void EventReceived(int e);
public event EventReceived? OnEventReceived;
byte[] data = new byte[4];
public void BeginRead()
{
if (networkStream == null) return;
networkStream?.BeginRead(data, 0, data.Length, OnReadComplete, null);
}
private void OnReadComplete (IAsyncResult ar)
{
try
{
int bytesRead = networkStream.EndRead(ar);
if (bytesRead > 0)
{
int ret = BitConverter.ToInt32(data);
OnEventReceived?.Invoke(ret);
}
}
catch (Exception ex) { }
}
public void SendData(int key)
{
try
{
byte[] bytes = BitConverter.GetBytes(key);
networkStream?.Write(bytes, 0, bytes.Length);
}catch(Exception e) { }
}
}
}