80 lines
2.0 KiB
C#
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) { }
|
|
}
|
|
}
|
|
}
|