| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547 | 
							- // using System.Net.Sockets;
 
- // using NetCore.ContentParse;
 
- // using NetCore.NetServerCoreBasic;
 
- // using NetCore.Protocol;
 
- //
 
- // namespace GameServer.NetLink;
 
- //
 
- // public class TCPLink : INetContainer
 
- // {
 
- //     public void Start()
 
- //     {
 
- //     }
 
- //
 
- //     public void Init(IContentParse iContentParse, IProtocol iProtocol)
 
- //     {
 
- //     }
 
- //
 
- //     public void AddGetData(object data)
 
- //     {
 
- //     }
 
- //
 
- //
 
- //     private byte[] buffData = new byte[6553500];
 
- //     private Socket _tcpClient;
 
- //     private Thread thread;
 
- //     public BinaryReader br;
 
- //     public BinaryWriter bw;
 
- //     public string url;
 
- //     private bool isRun;
 
- //     private long jg;
 
- //     private Thread heartThread;
 
- //     private Queue<SendBuffer> _sendBuffers = new Queue<SendBuffer>();
 
- //     private int allCount;
 
- //     private SocketAsyncEventArgs sae;
 
- //
 
- //     //记录半包数据
 
- //     private bool isBufferData;
 
- //     private byte[] lastBuffData;
 
- //     private int lastCount;
 
- //
 
- //     private ushort lastXueLieHao;
 
- //     //数据结束
 
- //
 
- //     //尾包
 
- //     private byte[] weiBaoBuffData;
 
- //
 
- //
 
- //     //
 
- //     public class RequestBuffer
 
- //     {
 
- //         // public HttpListenerContext httpListenerContext;
 
- //         public ushort xlh;
 
- //         public SimulationCombat combatRequest;
 
- //     }
 
- //
 
- //     public enum SendBufferType
 
- //     {
 
- //         Data,
 
- //         Connect,
 
- //     }
 
- //
 
- //     public class SendBuffer
 
- //     {
 
- //         public RequestBuffer RequestBuffer;
 
- //         public SimulationCombatResponse SimulationFightTogetherResponse;
 
- //         public SendBufferType SendBufferType;
 
- //
 
- //         /// <summary>
 
- //         /// 版本
 
- //         /// </summary>
 
- //         public ushort ver;
 
- //     }
 
- //
 
- //     public Queue<RequestBuffer> requestBuffer = new Queue<RequestBuffer>();
 
- //
 
- //     public void Init(string ip, int port)
 
- //     {
 
- //         this.url = ip;
 
- //         LogTool.Log("开启协议");
 
- //         _tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
- //         _tcpClient.Connect(ip, port);
 
- //
 
- //         isRun = true;
 
- //         LogTool.Log("启动成功" + url);
 
- //         heartThread = new Thread(HrartUpdate);
 
- //         heartThread.Start();
 
- //         thread = new Thread(TheUpdate);
 
- //         thread.Start();
 
- //     }
 
- //
 
- //     private void HrartUpdate()
 
- //     {
 
- //         while (isRun)
 
- //         {
 
- //             if (_tcpClient != null)
 
- //             {
 
- //                 try
 
- //                 {
 
- //                     SendBuffer sbs = null;
 
- //                     lock (_sendBuffers)
 
- //                     {
 
- //                         if (!_sendBuffers.TryDequeue(out sbs))
 
- //                         {
 
- //                         }
 
- //                     }
 
- //
 
- //                     if (sbs != null)
 
- //                     {
 
- //                         byte[] data = GetSendData(sbs);
 
- //                         _tcpClient.Send(data);
 
- //                     }
 
- //
 
- //                     long currTime = DateTime.Now.Ticks / 10000;
 
- //                     double kk = currTime - jg;
 
- //                     if (kk > 5 * 1000)
 
- //                     {
 
- //                         jg = currTime;
 
- //                         byte[] cdByte = IntToByte(1);
 
- //                         byte[] mdata = new byte[5];
 
- //                         mdata[0] = cdByte[0];
 
- //                         mdata[1] = cdByte[1];
 
- //                         mdata[2] = cdByte[2];
 
- //                         mdata[3] = cdByte[3];
 
- //                         mdata[4] = 2;
 
- //                         _tcpClient.Send(mdata);
 
- //                     }
 
- //                 }
 
- //                 catch (Exception e)
 
- //                 {
 
- //                     Console.WriteLine(e);
 
- //                     // isRun = false;
 
- //                     Dispose();
 
- //                 }
 
- //             }
 
- //
 
- //
 
- //             Thread.Sleep(1);
 
- //         }
 
- //     }
 
- //
 
- //     private byte[] ShortToByte(short number)
 
- //     {
 
- //         byte[] numberBytes = BitConverter.GetBytes(number).Reverse().ToArray();
 
- //         return numberBytes;
 
- //     }
 
- //
 
- //     private byte[] UShortToByte(ushort number)
 
- //     {
 
- //         byte[] numberBytes = BitConverter.GetBytes(number).Reverse().ToArray();
 
- //         return numberBytes;
 
- //     }
 
- //
 
- //     private byte[] IntToByte(int number)
 
- //     {
 
- //         byte[] numberBytes = BitConverter.GetBytes(number).Reverse().ToArray();
 
- //         return numberBytes;
 
- //     }
 
- //
 
- //     private short ByteToShort(byte[] numberBytes, bool isReverse = false)
 
- //     {
 
- //         if (isReverse)
 
- //         {
 
- //             short converted = BitConverter.ToInt16(numberBytes.Reverse().ToArray(), 0);
 
- //             return converted;
 
- //         }
 
- //         else
 
- //         {
 
- //             short converted = BitConverter.ToInt16(numberBytes, 0);
 
- //             return converted;
 
- //         }
 
- //     }
 
- //
 
- //     private ushort ByteToUshort(byte[] numberBytes, bool isReverse = false)
 
- //     {
 
- //         if (isReverse)
 
- //         {
 
- //             ushort converted = BitConverter.ToUInt16(numberBytes.Reverse().ToArray(), 0);
 
- //             return converted;
 
- //         }
 
- //         else
 
- //         {
 
- //             ushort converted = BitConverter.ToUInt16(numberBytes, 0);
 
- //             return converted;
 
- //         }
 
- //     }
 
- //
 
- //     private int ByteToInt(byte[] numberBytes, bool isReverse = false)
 
- //     {
 
- //         if (isReverse)
 
- //         {
 
- //             int converted = BitConverter.ToInt32(numberBytes.Reverse().ToArray(), 0);
 
- //             return converted;
 
- //         }
 
- //         else
 
- //         {
 
- //             int converted = BitConverter.ToInt32(numberBytes, 0);
 
- //             return converted;
 
- //         }
 
- //     }
 
- //
 
- //
 
- //     private void TheUpdate()
 
- //     {
 
- //         while (isRun)
 
- //         {
 
- //             // if (sae == null)
 
- //             // {
 
- //             //     SendAe();
 
- //             // }
 
- //
 
- //             try
 
- //             {
 
- //                 // SocketAsyncEventArgs sae=new SocketAsyncEventArgs();
 
- //                 // sae.SetBuffer(buffData);
 
- //
 
- //                 int count = _tcpClient.Receive(buffData);
 
- //
 
- //                 // if (count <= 4)
 
- //                 // {
 
- //                 //     Thread.Sleep(1);
 
- //                 //     continue;
 
- //                 // }
 
- //                 // LogTool.Log("数据来了" + count);
 
- //                 // byte[] currBuferr=new byte[count];
 
- //                 // Array.Copy(buffData, 0, currBuferr, 0,count);
 
- //                 // currBuferr = currBuferr.Reverse().ToArray();
 
- //                 try
 
- //                 {
 
- //                     int currCount = 0;
 
- //                     int startIndex = 0;
 
- //
 
- //                     // bool isEnd = false;
 
- //                     while (currCount < count)
 
- //                     {
 
- //                         // isEnd = true;
 
- //                         byte[] data = null;
 
- //                         ushort xueLieHao = 1;
 
- //                         int cdShort = 0;
 
- //                         // if (isWeiBao&&lastBuffData!=null)
 
- //                         // {
 
- //                         //     LogTool.Log("修复尾包"+lastBuffData.Length+"__"+count);
 
- //                         //     isWeiBao = false;
 
- //                         //     int maxCount = 6553500;
 
- //                         //     if (count + lastBuffData.Length > maxCount)
 
- //                         //     {
 
- //                         //         maxCount = count + lastBuffData.Length;
 
- //                         //     }
 
- //                         //     byte[] newBuffData = new byte[6553500];
 
- //                         //     Array.Copy(lastBuffData, 0, newBuffData, 0, lastBuffData.Length);
 
- //                         //     Array.Copy(buffData, 0, newBuffData, lastBuffData.Length, count);
 
- //                         //     count += lastBuffData.Length;
 
- //                         //     buffData = newBuffData;
 
- //                         //     lastBuffData = null;
 
- //                         // }
 
- //                         if (!isBufferData)
 
- //                         {
 
- //                             if (weiBaoBuffData != null)
 
- //                             {
 
- //                                 int maxCount = 6553500;
 
- //                                 if (count + weiBaoBuffData.Length > maxCount)
 
- //                                 {
 
- //                                     maxCount = count + weiBaoBuffData.Length;
 
- //                                 }
 
- //
 
- //                                 // LogTool.Log("修复包太短__" + count + "___" + weiBaoBuffData.Length);
 
- //                                 byte[] newBuff = new byte[maxCount];
 
- //                                 Array.Copy(weiBaoBuffData, 0, newBuff, 0, weiBaoBuffData.Length);
 
- //                                 Array.Copy(buffData, 0, newBuff, weiBaoBuffData.Length, count);
 
- //
 
- //                                 buffData = newBuff;
 
- //                                 count += weiBaoBuffData.Length;
 
- //                                 // LogTool.Log("修复包后太短__" + count);
 
- //                                 if (count < 6)
 
- //                                 {
 
- //                                     weiBaoBuffData = new byte[count];
 
- //                                     // LogTool.Log("包太短222__" + count);
 
- //                                     Array.Copy(buffData, currCount, weiBaoBuffData, 0, count);
 
- //                                     break;
 
- //                                 }
 
- //                                 else
 
- //                                 {
 
- //                                     weiBaoBuffData = null;
 
- //                                 }
 
- //                             }
 
- //                             else
 
- //                             {
 
- //                                 if (count - currCount < 6)
 
- //                                 {
 
- //                                     weiBaoBuffData = new byte[count];
 
- //                                     // LogTool.Log("包太短__" + count);
 
- //                                     Array.Copy(buffData, currCount, weiBaoBuffData, 0, count);
 
- //                                     break;
 
- //                                 }
 
- //                             }
 
- //                         }
 
- //
 
- //                         if (!isBufferData)
 
- //                         {
 
- //                             byte[] cdByte = new byte[2];
 
- //                             cdByte[0] = buffData[currCount];
 
- //                             currCount++;
 
- //                             cdByte[1] = buffData[currCount];
 
- //                             currCount++;
 
- //                             xueLieHao = ByteToUshort(cdByte, true);
 
- //
 
- //                             byte[] dataBuffLanl = new byte[4];
 
- //                             dataBuffLanl[0] = buffData[currCount];
 
- //                             currCount++;
 
- //                             dataBuffLanl[1] = buffData[currCount];
 
- //                             currCount++;
 
- //                             dataBuffLanl[2] = buffData[currCount];
 
- //                             currCount++;
 
- //                             dataBuffLanl[3] = buffData[currCount];
 
- //                             currCount++;
 
- //                             cdShort = (ByteToInt(dataBuffLanl, true));
 
- //                             // LogTool.Log("数据到来" + cdShort + "__" + count + "_" + xueLieHao);
 
- //                             if ((currCount + cdShort) > count) //处理半包情况
 
- //                             {
 
- //                                 lastBuffData = new byte[count - currCount];
 
- //                                 lastCount = cdShort;
 
- //                                 lastXueLieHao = xueLieHao;
 
- //                                 Array.Copy(buffData, currCount, lastBuffData, 0, lastBuffData.Length);
 
- //                                 // LogTool.Log("数据只有一半" + count + "__" + currCount + "___" + cdShort);
 
- //                                 isBufferData = true;
 
- //                                 break;
 
- //                             }
 
- //                             else
 
- //                             {
 
- //                                 // LogTool.Log(currCount + "_收到长度:" + cdShort + "_Max" + count);
 
- //                                 data = new byte[cdShort];
 
- //                                 Array.Copy(buffData, currCount, data, 0, data.Length);
 
- //                             }
 
- //                         }
 
- //                         else if (lastCount - lastBuffData.Length > count)
 
- //                         {
 
- //                             // LogTool.Log("数据只有一半的一半" + count + "__" + lastCount + "___" + lastBuffData.Length);
 
- //                             byte[] newLastBuffData = new byte[lastBuffData.Length + count];
 
- //                             Array.Copy(lastBuffData, 0, newLastBuffData, 0, lastBuffData.Length);
 
- //                             Array.Copy(buffData, 0, newLastBuffData, lastBuffData.Length, count);
 
- //                             lastBuffData = newLastBuffData;
 
- //                             break;
 
- //                         }
 
- //
 
- //                         else if (lastBuffData != null) //处理半包情况
 
- //                         {
 
- //                             isBufferData = false;
 
- //                             // LogTool.Log("修复半包" + lastCount + "__" + count + "___" +
 
- //                             //             (lastCount - lastBuffData.Length));
 
- //                             xueLieHao = lastXueLieHao;
 
- //                             data = new byte[lastCount];
 
- //                             cdShort = lastCount - lastBuffData.Length;
 
- //                             Array.Copy(lastBuffData, 0, data, 0, lastBuffData.Length);
 
- //                             Array.Copy(buffData, currCount, data, lastBuffData.Length, cdShort);
 
- //                         }
 
- //
 
- //                         SimulationCombat cr = SimulationCombat.Parser.ParseFrom(data);
 
- //                         RequestBuffer buffer = new RequestBuffer();
 
- //                         buffer.combatRequest = cr;
 
- //                         buffer.xlh = xueLieHao;
 
- //                         // allCount++;
 
- //                         // LogTool.Log("shoudao "+allCount);
 
- //                         // buffer.httpListenerContext = httpListenerContext;
 
- //                         LogTool.Log("收到中转服请求" + cr.CombatType + "___" + xueLieHao);
 
- //                         AddBuffer(buffer);
 
- //                         currCount += cdShort;
 
- //                         startIndex = currCount;
 
- //                     }
 
- //
 
- //                     // if (isEnd&&currCount < count&&!isBufferData)//尾包
 
- //                     // {
 
- //                     //     LogTool.Log("尾巴处理"+currCount+"___"+count);
 
- //                     //     isWeiBao = true;
 
- //                     //     lastBuffData = new byte[count - currCount];
 
- //                     //     Array.Copy(buffData, currCount, lastBuffData, 0, lastBuffData.Length);
 
- //                     //    
 
- //                     // }
 
- //                 }
 
- //                 catch (Exception e)
 
- //                 {
 
- //                     // RequestBuffer buffer = new RequestBuffer();
 
- //                     // buffer.combatRequest = cr;
 
- //                     LogTool.Log(e);
 
- //
 
- //                     Send(null, null);
 
- //                     // LogTool.Log("");
 
- //                 }
 
- //             }
 
- //             catch (Exception e)
 
- //             {
 
- //                 LogTool.Log(e);
 
- //                 break;
 
- //             }
 
- //         }
 
- //
 
- //         LogTool.Log("服务器执行完毕");
 
- //     }
 
- //
 
- //
 
- //     public void AddBuffer(RequestBuffer buffer)
 
- //     {
 
- //         lock (requestBuffer)
 
- //         {
 
- //             requestBuffer.Enqueue(buffer);
 
- //         }
 
- //     }
 
- //
 
- //     public RequestBuffer GetRequestBuffer()
 
- //     {
 
- //         lock (requestBuffer)
 
- //         {
 
- //             if (requestBuffer.TryDequeue(out RequestBuffer buffer))
 
- //             {
 
- //                 return buffer;
 
- //             }
 
- //
 
- //             return null;
 
- //         }
 
- //     }
 
- //
 
- //     private byte[] GetSendData(SendBuffer sendBuffer)
 
- //     {
 
- //         byte[] mdata = null;
 
- //         if (sendBuffer != null)
 
- //         {
 
- //             if (sendBuffer.SimulationFightTogetherResponse != null)
 
- //             {
 
- //                 byte[] data = null;
 
- //                 int size = sendBuffer.SimulationFightTogetherResponse.CalculateSize();
 
- //                 data = new byte[size];
 
- //                 CodedOutputStream cos = new CodedOutputStream(data);
 
- //                 sendBuffer.SimulationFightTogetherResponse.WriteTo(cos);
 
- //                 cos.CheckNoSpaceLeft();
 
- //                 LogTool.Log("回复消息" + sendBuffer.RequestBuffer.xlh + "__" + data.Length);
 
- //                 mdata = new byte[data.Length + 7];
 
- //                 byte[] zcd = IntToByte((mdata.Length - 4));
 
- //
 
- //
 
- //                 mdata[0] = zcd[0];
 
- //                 mdata[1] = zcd[1];
 
- //                 mdata[2] = zcd[2];
 
- //                 mdata[3] = zcd[3];
 
- //
 
- //                 // LogTool.Log( "mdata"+[0]+"_"+ mdata[1]+"_"+ mdata[2]+"_"+ mdata[3]);
 
- //
 
- //                 mdata[4] = 1;
 
- //                 byte[] cdByte = UShortToByte(sendBuffer.RequestBuffer.xlh);
 
- //                 mdata[5] = cdByte[0];
 
- //                 mdata[6] = cdByte[1];
 
- //
 
- //                 Array.Copy(data, 0, mdata, 7, data.Length);
 
- //             }
 
- //             else
 
- //             {
 
- //                 if (sendBuffer.SendBufferType == SendBufferType.Connect)
 
- //                 {
 
- //                     byte[] cdByte = IntToByte(3);
 
- //                     mdata = new byte[7];
 
- //                     mdata[0] = cdByte[0];
 
- //                     mdata[1] = cdByte[1];
 
- //                     mdata[2] = cdByte[2];
 
- //                     mdata[3] = cdByte[3];
 
- //                     mdata[4] = 0;
 
- //                     cdByte = UShortToByte(sendBuffer.ver);
 
- //                     mdata[5] = cdByte[0];
 
- //                     mdata[6] = cdByte[1];
 
- //                 }
 
- //                 else
 
- //                 {
 
- //                     byte[] cdByte = IntToByte(3);
 
- //                     mdata = new byte[7];
 
- //                     mdata[0] = cdByte[0];
 
- //                     mdata[1] = cdByte[1];
 
- //                     mdata[2] = cdByte[2];
 
- //                     mdata[3] = cdByte[3];
 
- //
 
- //                     mdata[4] = 3;
 
- //                     cdByte = UShortToByte(sendBuffer.RequestBuffer.xlh);
 
- //                     mdata[5] = cdByte[0];
 
- //                     mdata[6] = cdByte[1];
 
- //                 }
 
- //             }
 
- //         }
 
- //         else
 
- //         {
 
- //             LogTool.Log("回复消息" + 125);
 
- //
 
- //             byte[] cdByte = IntToByte(1);
 
- //             mdata = new byte[7];
 
- //             mdata[0] = cdByte[0];
 
- //             mdata[1] = cdByte[1];
 
- //             mdata[2] = cdByte[2];
 
- //             mdata[3] = cdByte[3];
 
- //
 
- //             mdata[4] = 4;
 
- //         }
 
- //
 
- //
 
- //         return mdata;
 
- //     }
 
- //
 
- //     public void Send(RequestBuffer buffer, SimulationCombatResponse resp,
 
- //         SendBufferType sendBufferType = SendBufferType.Data)
 
- //     {
 
- //         lock (_sendBuffers)
 
- //         {
 
- //             SendBuffer sendBuffer = new SendBuffer();
 
- //             sendBuffer.RequestBuffer = buffer;
 
- //             sendBuffer.SimulationFightTogetherResponse = resp;
 
- //             sendBuffer.SendBufferType = sendBufferType;
 
- //             _sendBuffers.Enqueue(sendBuffer);
 
- //         }
 
- //     }
 
- //
 
- //     public void Send(SendBuffer sendBuffer)
 
- //     {
 
- //         lock (_sendBuffers)
 
- //         {
 
- //             // SendBuffer sendBuffer = new SendBuffer();
 
- //             // sendBuffer.RequestBuffer = buffer;
 
- //             // sendBuffer.SimulationFightTogetherResponse = resp;
 
- //             // sendBuffer.SendBufferType = sendBufferType;
 
- //             _sendBuffers.Enqueue(sendBuffer);
 
- //         }
 
- //     }
 
- //
 
- //     public void Dispose()
 
- //     {
 
- //         isRun = false;
 
- //         if (thread != null)
 
- //         {
 
- //             _tcpClient.Close();
 
- //
 
- //             thread.Abort();
 
- //         }
 
- //
 
- //         if (heartThread != null)
 
- //         {
 
- //             heartThread.Abort();
 
- //         }
 
- //
 
- //         heartThread = null;
 
- //         thread = null;
 
- //     }
 
- // }
 
- //
 
- // }
 
- // }
 
 
  |