DCS/ruiyiweiUX/Assets/GeneralTools/Scripts/Always/SocketManager.cs

172 lines
5.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace GeneralTools
{
public class SocketManager : SingletonBaseAttribute<SocketManager>
{
private List<SocketBase> socketList;
public override void IAwake()
{
socketList = new List<SocketBase>();
}
public SocketBase GetSocketByName(string socketName)
{
for (int i = 0; i < socketList.Count; i++)
{
if (socketList[i] != null && socketList[i].GetSocketName() == socketName)
{
return socketList[i];
}
}
return null;
}
private void Update()
{
if (socketList == null)
return;
//处理所有创建的socket消息事件
for (int i = 0; i < socketList.Count; i++)
{
if(socketList[i]!=null)
{
socketList[i].DoReceiveEvent();
socketList[i].SetNowTime(Time.realtimeSinceStartup);
}
}
}
/// <summary>
/// 创建TCP服务器绑定自身IP和端口
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
public SocketBase CreateTcpSever(string ip, int port)
{
SocketBase newSever = new TCPServer(ip, port);
AddToSocketList(newSever);
return newSever;
}
/// <summary>
/// 创建TCP服务器绑定端口
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
public SocketBase CreateTcpSever(int port)
{
SocketBase newSever = new TCPServer("", port);
AddToSocketList(newSever);
return newSever;
}
/// <summary>
/// 创建TCP客户端,指定服务器IP,端口
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
public SocketBase CreateTcpClient(string ip, int port)
{
SocketBase newClient = new TCPClient(ip, port);
AddToSocketList(newClient);
return newClient;
}
/// <summary>
/// 创建UDP指定对方IP,端口,并绑定自己端口
/// </summary>
/// <param name="targetIP"></param>
/// <param name="targetPort"></param>
/// <param name="selfPort"></param>
/// <returns></returns>
public SocketBase CreateUdp(string targetIP, int targetPort, int selfPort)
{
SocketBase newUdp = new UDPClient(targetIP, targetPort, selfPort);
AddToSocketList(newUdp);
return newUdp;
}
/// <summary>
/// 创建UDP 指定对方IP,端口,自身端口随机
/// </summary>
/// <param name="targetIP"></param>
/// <param name="targetPort"></param>
/// <param name="selfPort"></param>
/// <returns></returns>
public SocketBase CreateUdp(string targetIP, int targetPort)
{
SocketBase newUdp = new UDPClient(targetIP, targetPort, 0);
AddToSocketList(newUdp);
return newUdp;
}
/// <summary>
/// 创建UDP对指定端口广播并绑定自身端口
/// </summary>
/// <param name="targetPort"></param>
/// <param name="selfPort"></param>
/// <returns></returns>
public SocketBase CreateUdp(int targetPort, int selfPort)
{
SocketBase newUdp = new UDPClient(null, targetPort, selfPort);
AddToSocketList(newUdp);
return newUdp;
}
/// <summary>
/// 创建UDP对指定端口广播自身端口随机
/// </summary>
/// <param name="targetPort"></param>
/// <returns></returns>
public SocketBase CreateUdp(int targetPort)
{
SocketBase newUdp = new UDPClient(null, targetPort, 0);
AddToSocketList(newUdp);
return newUdp;
}
/// <summary>
/// 创建UDP对10000端口广播自身端口随机
/// </summary>
/// <param name="targetPort"></param>
/// <returns></returns>
public SocketBase CreateUdp()
{
SocketBase newUdp = new UDPClient(null, 10000, 0);
AddToSocketList(newUdp);
return newUdp;
}
/// <summary>
/// 创建WebSocket客户端
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public SocketBase CreateWebSocketClient(string url)
{
SocketBase newWebSocketClient = new WebSocketClient(url);
AddToSocketList(newWebSocketClient);
return newWebSocketClient;
}
protected void AddToSocketList(SocketBase socket)
{
if (socketList == null)
return;
int index = socketList.Count;
socketList.Add(socket);
socket.onSocketQuit += () => { SocketQuitHandler(index); };
}
protected void SocketQuitHandler(int index)
{
if (socketList == null)
return;
if(index >= 0 && index<socketList.Count)
{
socketList[index] = null;
}
}
public override void IOnApplicationQuit()
{
for (int i = 0; i < socketList.Count; i++)
{
if (socketList[i] != null)
socketList[i].SocketQuit();
}
}
}
}