| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | 
							- #if COMBAT_SERVER
 
- using System;
 
- using System.Buffers;
 
- using System.Collections.Generic;
 
- using System.Net;
 
- using System.Net.Sockets;
 
- using System.Net.Sockets.Kcp;
 
- using System.Threading;
 
- using Com.Fort23.Protocol.Protobuf;
 
- using Fort23.UTool;
 
- namespace Core.KCPTool
 
- {
 
-     public class KCPServerConnection : IKcpCallback, IServerConnection
 
-     {
 
-         // private Thread _udpClientThread;
 
-         private byte[] buffer = new byte[2048];
 
-         private KCPServer kcpServer;
 
-         // public Queue<CombatSynchronizeRequest> CombatSynchronizeRequests { get; set; }
 
-         public bool isConnected { get; set; }
 
-         public int connectionID { get; set; }
 
-         public long playerId { get; set; }
 
-         private long lasetSendTime;
 
-         public KCPServerConnection(KCPServer kcpServer, IPEndPoint endPoint)
 
-         {
 
-             EndPoint = endPoint;
 
-             this.kcpServer = kcpServer;
 
-             _kcp = new SimpleSegManager.Kcp(0, this);
 
-             kcp.NoDelay(1, 40, 2, 0);
 
-             isConnected = true;
 
-         }
 
-         public SimpleSegManager.Kcp kcp
 
-         {
 
-             get { return _kcp; }
 
-         }
 
-         public IPEndPoint EndPoint { get; set; }
 
-         private SimpleSegManager.Kcp _kcp;
 
-         public void Output(IMemoryOwner<byte> buffer, int avalidLength)
 
-         {
 
-             if (EndPoint == null || kcpServer == null)
 
-             {
 
-                 LogTool.Log("发送错误,链接没有了:");
 
-                 return;
 
-             }
 
-             var s = buffer.Memory.Span.Slice(0, avalidLength).ToArray();
 
-             // LogTool.Log("发送:" + EndPoint.Address + "__" + EndPoint.Port);
 
-             kcpServer.SocketSendTo(s, EndPoint);
 
-             buffer.Dispose();
 
-         }
 
-         public int SendData(byte[] data, int dataSize)
 
-         {
 
-             if (_kcp == null)
 
-             {
 
-                 return -255;
 
-             }
 
-             int c = kcp.Send(data.AsSpan().Slice(0, dataSize));
 
-             return c;
 
-         }
 
-         public void Update()
 
-         {
 
-             if (_kcp == null)
 
-             {
 
-                 return;
 
-             }
 
-             kcp.Update(DateTimeOffset.UtcNow);
 
-         }
 
-         public void ReceiveAsync()
 
-         {
 
-             if (kcp == null)
 
-             {
 
-                 return;
 
-             }
 
-             var (buffer, avalidLength) = kcp.TryRecv();
 
-             if (avalidLength <= 0)
 
-             {
 
-                 return;
 
-             }
 
-             var s = buffer.Memory.Span.Slice(0, avalidLength).ToArray();
 
-             if (s == null)
 
-             {
 
-                 return;
 
-             }
 
-             SendDataType sendDataType = (SendDataType)s[0];
 
-             switch (sendDataType)
 
-             {
 
-                 // case SendDataType.ShakeHands:
 
-                 //     byte[] playerData = new byte[8];
 
-                 //     playerData[0] = s[1];
 
-                 //     playerData[1] = s[2];
 
-                 //     playerData[2] = s[3];
 
-                 //     playerData[3] = s[4];
 
-                 //     playerData[4] = s[5];
 
-                 //     playerData[5] = s[6];
 
-                 //     playerData[6] = s[7];
 
-                 //     playerData[7] = s[8];
 
-                 //     long playerId = SocketTool.ByteToInt(playerData);
 
-                 //     this.playerId = playerId;
 
-                 //     LogTool.Log("收到握手包"+playerId);
 
-                 //     kcpServer.AddServerConnection(playerId,0, this);
 
-                 //    
 
-                 //     break;
 
-                 case SendDataType.Data:
 
-                     byte[] protoBuffer = new byte[s.Length - 1];
 
-                     Array.Copy(s, 1, protoBuffer, 0, protoBuffer.Length);
 
-                     CombatSynchronizeRequest combatSynchronizeRequest =
 
-                         CombatSynchronizeRequest.Parser.ParseFrom(protoBuffer);
 
-                     if (combatSynchronizeRequest == null)
 
-                     {
 
-                         LogTool.Error("错误的实例化战斗" + s.Length);
 
-                     }
 
-                     else
 
-                     {
 
-                         // LogTool.Error("收到客户端消息" + combatSynchronizeRequest.CombatSynchronizeType);
 
-                         kcpServer.AddCombatSynchronizeRequest(combatSynchronizeRequest);
 
-                     }
 
-                     break;
 
-                 case SendDataType.GetGameFrameByte:
 
-                     int gameFrame = 0;
 
-                     byte[] fdata = new byte[4];
 
-                     Array.Copy(s, 9, fdata, 0, fdata.Length);
 
-                     gameFrame = SocketTool.ByteToInt(fdata);
 
-                     kcpServer.SendGameFrame(gameFrame, this);
 
-                     break;
 
-             }
 
-         }
 
-         public int Input(byte[] data)
 
-         {
 
-             int ok = kcp.Input(data);
 
-             return ok;
 
-         }
 
-         public void Dispose()
 
-         {
 
-             // _udpClientThread = null;
 
-             kcp?.Dispose();
 
-             _kcp = null;
 
-             kcpServer = null;
 
-         }
 
-     }
 
- }
 
- #endif
 
 
  |