using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using UnityEngine;
using System.Collections;
namespace Server_Local_TCP
{
public class Server_TCP
{
public SKillable Perest;
public interface SKillable
{
void Kills(string peremennaya);
}
public void Skillable_instante(SKillable SKillable_peremennaya)
{
try
{
Perest = SKillable_peremennaya;
obrabotka();
}
catch (Exception e) { Debug.Log(e); }
}
private IPAddress localAddr;
private TcpListener server;
private int ports;
private Thread Server;
private List<TcpClient> Client_TcpClient = new List<TcpClient>();
private List<System.Threading.Thread> Client_Disconect = new List<Thread>();
private List<Thread> Client_Client = new List<Thread>();
public void start_server(string ip, int port)
{
localAddr = IPAddress.Parse(ip);
server = new TcpListener(localAddr, port);
server.Start();
System.Threading.Thread MyThread1 =
new System.Threading.Thread(delegate() { Podklucenie_k_servers(); });
MyThread1.Start();
Server = MyThread1;
}
public void stop_server()
{
System.Threading.Thread MyThread1 =
new System.Threading.Thread(delegate() { stop_server_Thread(); });
MyThread1.Start();
}
public void stop_server_Thread()
{
try
{
Debug.Log("Server_Stop");
Console.WriteLine("Server_Stop");
for (int i = 0; i < Client_Disconect.Count; i++)
{
Client_Disconect[i].Join(1);
}
server.Stop();
Server.Join(1000);
}
catch (Exception tr)
{
Debug.Log(tr);
Console.WriteLine(tr);
}
}
public void Podklucenie_k_servers()
{
Debug.Log("Server_Start");
Console.WriteLine("Server_Start");
while (true)
{
try
{
TcpClient client = server.AcceptTcpClient();
System.Threading.Thread MyThread1 =
new System.Threading.Thread(delegate() { clients(client); });
MyThread1.Start();
Client_TcpClient.Add(client);
Client_Disconect.Add(MyThread1);
}
catch (Exception tr)
{
Debug.Log(tr);
Console.WriteLine(tr);
}
}
}
private void clients(TcpClient client)
{
Debug.Log("Client_on");
Console.WriteLine("Client_on");
NetworkStream stream = client.GetStream();
bool diskonect = true;
System.Threading.Thread MyThread1 =
new System.Threading.Thread(delegate() { priem(stream); });
MyThread1.Start();
while (diskonect == true)
{
Thread.Sleep(2000);
int i;
byte[] bytes = new byte[1024];
i = stream.Read(bytes, 0, bytes.Length);
if (i == 0)
{
client.Close();
diskonect = false;
}
else
{
Debug.Log("Client");
Console.WriteLine("Client");
}
}
Debug.Log("Client_off");
Console.WriteLine("Client_off");
}
private void priem(NetworkStream stream)
{
string Request = "";
byte[] Buffer = new byte[1024];
int Count;
Count = stream.Read(Buffer, 0, Buffer.Length);
Request += Encoding.ASCII.GetString(Buffer, 0, Count);
priem_string.Add(Request);
}
public List<string> priem_string = new List<string>();
public bool obrabotka_bool;
public void obrabotka()
{
while (obrabotka_bool)
{
if (priem_string.Count > 0)
{
Perest.Kills(priem_string[0]);
priem_string.RemoveAt(0);
}
}
}
public void otpravka(NetworkStream stream, string Text)
{
string response = "Привет мир";
byte[] data = Encoding.UTF8.GetBytes(response);
stream.Write(data, 0, data.Length);
}
}
}