骑行界面调整,底层逻辑细化
This commit is contained in:
1 parent
d5133ee7b0
commit
9a7830f46a
168 files changed
+19164
-393
No files matched your search
@@ -0,0 +1,94 @@
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.Scripts;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts.Network
|
||||
{
|
||||
public class UdpService : IService
|
||||
{
|
||||
private bool isExit = false;
|
||||
private UdpClient udpClient;
|
||||
private IPEndPoint iPEndPoint;
|
||||
|
||||
public void Start(Action<List<ReceiveMsgModel>> action)
|
||||
{
|
||||
if (udpClient == null)
|
||||
{
|
||||
//if (!IPAddress.TryParse(ConfigHelper.ServerIpAdress, out var ipString))
|
||||
//{
|
||||
// throw new ArgumentException("IP地址不正确");
|
||||
//}
|
||||
|
||||
//服务端端口
|
||||
iPEndPoint = ConfigHelper.UdpAddress;
|
||||
udpClient = new UdpClient();
|
||||
uint IOC_IN = 0x80000000;
|
||||
uint IOC_VENDOR = 0x18000000;
|
||||
uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
|
||||
udpClient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);
|
||||
udpClient.Client.ReceiveTimeout = 5000;//这里如果不设置超时,会导致整个应用程序阻塞。
|
||||
udpClient.Client.SendTimeout = 5000;
|
||||
udpClient.Connect(iPEndPoint);
|
||||
//heartbeat = new System.Timers.Timer();
|
||||
//heartbeat.Interval = 1000;//20秒一次心跳包
|
||||
//heartbeat.AutoReset = true;
|
||||
//heartbeat.Enabled = true;
|
||||
//heartbeat.Elapsed += Heartbeat_Elapsed;
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
while (isExit == false)
|
||||
{
|
||||
try
|
||||
{
|
||||
byte[] receiveBytes = udpClient.Receive(ref iPEndPoint);
|
||||
var returnData = Encoding.ASCII.GetString(receiveBytes);
|
||||
var list = new List<ReceiveMsgModel>();
|
||||
var itemList = returnData.Split('|');
|
||||
|
||||
foreach (var item in itemList)
|
||||
{
|
||||
var info = ReceiveMsgModel.Parse(item);
|
||||
if (info != null)
|
||||
{
|
||||
list.Add(info);
|
||||
}
|
||||
}
|
||||
action(list);
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
await Task.Delay(6000);
|
||||
if (isExit == false && udpClient != null)
|
||||
{
|
||||
udpClient.Connect(iPEndPoint);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void Send(byte[] dgram, int bytes)
|
||||
{
|
||||
udpClient?.Send(dgram, bytes);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
isExit = true;
|
||||
udpClient?.Close();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user