public KcpClient(UdpServer udpserver, EndPoint remoteendpoint) : base(udpserver, remoteendpoint) { #if LOOPBACKTEST onUserLevelReceivedCompleted += (ref byte[] buffer) => { #if UTF16 var str = System.Text.Encoding.Unicode.GetString(buffer); #else var str = System.Text.Encoding.UTF8.GetString(buffer); #endif Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine(str); Console.ForegroundColor = ConsoleColor.White; userlevelsend(ref buffer); }; #endif kcphandle handle = new kcphandle(); OnReceivedCompletePointer = (ref byte[] buffer) => { mKcp.Input(buffer);//buffer is received from low level data }; handle.Out = buffer => { mudpserver.UdpListener.SendTo(buffer.ToArray(), mremoteEP);//low level send }; mKcp = new Kcp((uint)(5598781), handle); mKcp.NoDelay(1, 5, 2, 1);//fast mKcp.WndSize(64, 64); mKcp.SetMtu(512); Task.Run(async() => { try { int updateCount = 0; while (true) { mKcp.Update(DateTime.UtcNow); int len; while ((len = mKcp.PeekSize()) > 0) { var buffer = new byte[len]; if (mKcp.Recv(buffer) >= 0) { onUserLevelReceivedCompleted.Invoke(ref buffer); } } await Task.Delay(1); updateCount++; if (updateCount % 1000 == 0) { Console.WriteLine($"KCP ALIVE {updateCount}----"); } } } catch (Exception e) { Console.WriteLine(e); } }); }
public KcpClient(UdpServer udpserver, EndPoint remoteendpoint) : base(udpserver, remoteendpoint) { #if LOOPBACKTEST onUserLevelReceivedCompleted += (ref byte[] buffer) => { byte[] idbuffer = new byte[KcpChannel.idlength]; Array.ConstrainedCopy(buffer, 0, idbuffer, 0, 32); #if UTF16 var idstr = System.Text.Encoding.Unicode.GetString(idbuffer); #else var idstr = System.Text.Encoding.UTF8.GetString(idbuffer); #endif bool bcontain = KcpChannelManager.OnchannelReceivedatacallbackmap.ContainsKey(idstr); if (bcontain) { if (KcpChannelManager.OnchannelReceivedatacallbackmap[idstr].mkcpclient.mremoteEP == mremoteEP) { } else { // KcpChannelManager.OnchannelReceivedatacallbackmap[idstr].mkcpclient.mremoteEP = mremoteEP; KcpChannelManager.OnchannelReceivedatacallbackmap.Remove(idstr); KcpChannelManager.OnchannelReceivedatacallbackmap.Add(idstr, new KcpChannel(idstr, this));//need verify } } else { KcpChannelManager.OnchannelReceivedatacallbackmap.Add(idstr, new KcpChannel(idstr, this)); } int datasize = buffer.Length - KcpChannel.idlength; byte[] databuffer = new byte[datasize]; Array.ConstrainedCopy(buffer, KcpChannel.idlength, databuffer, 0, datasize); KcpChannelManager.OnchannelReceivedatacallbackmap[idstr].Onreceivedata(ref databuffer); #region //byte[] latitudebuffer = new byte[4]; //Array.ConstrainedCopy(buffer, 32, latitudebuffer, 0, 4); //float latitude = ByteArraytoChannelidType.DeSerialize(ref latitudebuffer); //byte[] longitudebuffer = new byte[4]; //Array.ConstrainedCopy(buffer, 32+4, longitudebuffer, 0, 4); //float longitude = ByteArraytoChannelidType.DeSerialize(ref longitudebuffer); //Console.ForegroundColor = ConsoleColor.Blue; //Console.WriteLine(idstr); //Console.WriteLine(latitude.ToString()); //Console.WriteLine(longitude.ToString()); //Console.ForegroundColor = ConsoleColor.White; //userlevelsend(ref buffer); #endregion }; #endif kcphandle handle = new kcphandle(); OnReceivedCompletePointer = (ref byte[] buffer) => { mKcp.Input(buffer);//buffer is received from low level data }; handle.Out = buffer => { mudpserver.UdpListener.SendTo(buffer.ToArray(), mremoteEP);//low level send }; mKcp = new Kcp((uint)(5598781), handle); mKcp.NoDelay(1, 5, 2, 1);//fast mKcp.WndSize(64, 64); mKcp.SetMtu(512); Task.Run(async() => { try { int updateCount = 0; while (true) { mKcp.Update(DateTime.UtcNow); int len; while ((len = mKcp.PeekSize()) > 0) { var buffer = new byte[len]; if (mKcp.Recv(buffer) >= 0) { onUserLevelReceivedCompleted.Invoke(ref buffer); } } await Task.Delay(1); updateCount++; if (updateCount % 1000 == 0) { Console.WriteLine($"KCP ALIVE {updateCount}----"); } } } catch (Exception e) { Console.WriteLine(e); } }); }
public KcpClient(string ip, int port) { IPAddress ipAd = IPAddress.Parse(ip); //local ip address "172.16.5.188" remoteEndPoint = new IPEndPoint(ipAd, port); //27001 m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); #if LOOPBACKTEST onUserLevelReceivedCompleted += (ref byte[] buffer) => { #if UTF16 var str = System.Text.Encoding.Unicode.GetString(buffer); #else var str = System.Text.Encoding.UTF8.GetString(buffer); #endif Console.WriteLine(str); //userlevelsend(ref buffer); }; #endif kcphandle handle = new kcphandle(); handle.Out = buffer => { m_Socket.SendTo(buffer.ToArray(), remoteEndPoint);//low level send }; mKcp = new Kcp((uint)(5598781), handle); mKcp.NoDelay(1, 5, 2, 1);//fast mKcp.WndSize(64, 64); mKcp.SetMtu(512); Task.Run(async() => { try { int updateCount = 0; while (true) { mKcp.Update(DateTime.UtcNow); int len; while ((len = mKcp.PeekSize()) > 0) { var buffer = new byte[len]; if (mKcp.Recv(buffer) >= 0) { onUserLevelReceivedCompleted.Invoke(ref buffer); } } await Task.Delay(5); updateCount++; if (updateCount % 1000 == 0) { Console.WriteLine($"KCP ALIVE {updateCount}----"); } } } catch (Exception e) { Console.WriteLine(e); } }); Task.Run( async() => { EndPoint remoteEP = new IPEndPoint(1, 1); byte[] receivedbuffer = new Byte[65507]; await Task.Delay(1); while (true) { try { int bytesReceived = m_Socket.ReceiveFrom(receivedbuffer, ref remoteEP); //here is a block call ,wait until it receive data byte[] validbuffer = new byte[bytesReceived]; Array.ConstrainedCopy(receivedbuffer, 0, validbuffer, 0, bytesReceived); mKcp.Input(validbuffer); //buffer is received from low level data //await Task.Delay(1); } catch { } } } ); }