mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-04-22 03:59:36 +08:00
147 lines
4.6 KiB
C#
147 lines
4.6 KiB
C#
using FunGameServer.Models.Config;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.IO;
|
||
using System.Net.Sockets;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace FunGameServer.Sockets
|
||
{
|
||
public class ClientSocket
|
||
{
|
||
public bool Running { get; set; } = false;
|
||
public Socket? Socket { get; set; } = null;
|
||
|
||
public ClientSocket(Socket socket, bool running)
|
||
{
|
||
Socket = socket;
|
||
Running = running;
|
||
}
|
||
|
||
bool Read(Socket socket)
|
||
{
|
||
// 接收客户端消息
|
||
byte[] buffer = new byte[2048];
|
||
int length = socket.Receive(buffer);
|
||
if (length > 0)
|
||
{
|
||
string type = Encoding.GetEncoding("unicode").GetString(buffer, 0, length);
|
||
Console.Write("收到来自:客户端(" + type + ") -> ");
|
||
buffer = new byte[2048];
|
||
length = socket.Receive(buffer);
|
||
if (length > 0)
|
||
{
|
||
string msg = Encoding.GetEncoding("unicode").GetString(buffer, 0, length);
|
||
Console.WriteLine(msg);
|
||
int getType = Convert.ToInt32(type);
|
||
if (getType == (int)SocketEnums.ReadType.HeartBeat) // 检测心跳包
|
||
Send(socket, getType, msg);
|
||
return true;
|
||
}
|
||
else
|
||
Console.WriteLine("客户端没有回应。");
|
||
return false;
|
||
}
|
||
else
|
||
Console.WriteLine("客户端没有回应。");
|
||
return false;
|
||
}
|
||
|
||
bool Send(Socket socket, int type, string msg)
|
||
{
|
||
// 发送消息给客户端
|
||
byte[] buffer = new byte[2048];
|
||
buffer = Encoding.GetEncoding("unicode").GetBytes(Convert.ToString(type));
|
||
if (socket.Send(buffer) > 0)
|
||
{
|
||
Console.Write("发送给:客户端(" + type + ") <- ");
|
||
buffer = new byte[2048];
|
||
buffer = Encoding.GetEncoding("unicode").GetBytes(msg);
|
||
if (socket.Send(buffer) > 0)
|
||
{
|
||
Console.WriteLine("发送给:客户端(" + msg + ") <- ");
|
||
return true;
|
||
}
|
||
else
|
||
Console.WriteLine("无法传输数据,与客户端的连接可能丢失。");
|
||
return false;
|
||
}
|
||
else
|
||
Console.WriteLine("无法传输数据,与客户端的连接可能丢失。");
|
||
return false;
|
||
}
|
||
|
||
public void Start()
|
||
{
|
||
Task StringStream = Task.Factory.StartNew(() =>
|
||
{
|
||
CreateStringStream();
|
||
});
|
||
Task IntStream = Task.Factory.StartNew(() =>
|
||
{
|
||
CreateStringStream();
|
||
});
|
||
Task DecimalStream = Task.Factory.StartNew(() =>
|
||
{
|
||
CreateDecimalStream();
|
||
});
|
||
Task ObjectStream = Task.Factory.StartNew(() =>
|
||
{
|
||
CreateObjectStream();
|
||
});
|
||
}
|
||
|
||
private void CreateStringStream()
|
||
{
|
||
Thread.Sleep(1000);
|
||
Console.WriteLine("Creating: StringStream...OK");
|
||
while (Running)
|
||
{
|
||
if (Socket != null)
|
||
Read(Socket);
|
||
else
|
||
{
|
||
Console.WriteLine("ERROR: Socket is Closed.");
|
||
Console.WriteLine("DONE: StringStream is Closed.");
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
private void CreateIntStream()
|
||
{
|
||
Thread.Sleep(1000);
|
||
Console.WriteLine("Creating: IntStream...OK");
|
||
while (Running)
|
||
{
|
||
Console.WriteLine("DONE: IntStream is Closed.");
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void CreateDecimalStream()
|
||
{
|
||
Thread.Sleep(1000);
|
||
Console.WriteLine("Creating: DecimalStream...OK");
|
||
while (Running)
|
||
{
|
||
Console.WriteLine("DONE: DecimalStream is Closed.");
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void CreateObjectStream()
|
||
{
|
||
Thread.Sleep(1000);
|
||
Console.WriteLine("Creating: ObjectStream...OK");
|
||
while (Running)
|
||
{
|
||
Console.WriteLine("DONE: ObjectStream is Closed.");
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|