111
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using Stary.Evo;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Main
|
||||
{
|
||||
public interface IClientSocketSystem : ISystem
|
||||
{
|
||||
/// <summary>
|
||||
/// 连接
|
||||
/// </summary>
|
||||
void OnConnect(string ip);
|
||||
|
||||
/// <summary>
|
||||
/// 向服务端发送消息
|
||||
/// </summary>
|
||||
/// <param name="type">消息类型</param>
|
||||
/// <param name="message">消息内容</param>
|
||||
void Send(SocketEvent type, string message);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 断开连接
|
||||
/// </summary>
|
||||
void DisConnect();
|
||||
}
|
||||
|
||||
|
||||
public class ClientSocketSystem : AbstractSystem, IClientSocketSystem
|
||||
{
|
||||
private SocketClient _socketClient;
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
// 注意由于Unity编译器环境下,游戏开启/关闭只影响主线程的开关,游戏关闭回调时需要通过Close函数来关闭服务端/客户端的线程。
|
||||
if (_socketClient != null) _socketClient.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向服务端发送消息
|
||||
/// </summary>
|
||||
/// <param name="type">消息类型</param>
|
||||
/// <param name="message">消息内容</param>
|
||||
public void Send(SocketEvent type, string message)
|
||||
{
|
||||
var bytes = Encoding.UTF8.GetBytes(message);
|
||||
_socketClient.Send((ushort)type, bytes);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 退出服务端
|
||||
/// </summary>
|
||||
public void DisConnect()
|
||||
{
|
||||
// 踢出连接
|
||||
_socketClient.DisConnect();
|
||||
}
|
||||
|
||||
public void OnConnect(string ip)
|
||||
{
|
||||
_socketClient = new SocketClient(ip, 10000);
|
||||
|
||||
|
||||
_socketClient.Connect(() =>
|
||||
{
|
||||
Debug.Log("连接成功");
|
||||
_socketClient.OnReceive += OnReceive;
|
||||
// _client.DisConnect();
|
||||
}, () => { Debug.Log("连接失败"); });
|
||||
}
|
||||
|
||||
public void Connect()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnInit()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 接收客户端消息
|
||||
/// </summary>
|
||||
/// <param name="client">指定客户端</param>
|
||||
/// <param name="data">消息数据</param>
|
||||
private void OnReceive(SocketDataPack data)
|
||||
{
|
||||
Debug.LogFormat("接收到数据>>>{0} {1}", (SocketEvent)data.Type, data.Buff.Length);
|
||||
|
||||
switch ((SocketEvent)data.Type)
|
||||
{
|
||||
case SocketEvent.ServerMessage:
|
||||
Debug.LogFormat("接收到服务器数据 >>> {0}", Encoding.UTF8.GetString(data.Data));
|
||||
var message = Encoding.UTF8.GetString(data.Data);
|
||||
|
||||
break;
|
||||
case SocketEvent.ClientDisconn:
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public string GetLocalIPv4()
|
||||
{
|
||||
return Dns.GetHostEntry(Dns.GetHostName())
|
||||
.AddressList.First(f => f.AddressFamily == AddressFamily.InterNetwork)
|
||||
.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user