//----------------------------------------------------------------------------------------- public void SendReliableMessageTo(IPEndPoint target, NetMessage data) { data.PushFront(++nmID); data.PushFront((byte)RU_MessageType.RELIABLE); AddRUMessage(nmID, target, data); _socket.BeginSend(data.ToArray(), data.GetLength(), target, new AsyncCallback(SentCallback), _socket); }
//----------------------------------------------------------------------------------------- private void ManageReliable(IPEndPoint source, NetMessage nm) { UInt32 id = nm.PopUInt32(); int sourceHC = source.GetHashCode(); NetMessage tmp = new NetMessage(); tmp.Push(sourceHC); tmp.Push(id); UInt64 id64 = tmp.PopUInt64(); if (alreadyReceived.Contains(id64)) { return; } tmp.Push(sourceHC); tmp.Push(id - 1000); UInt64 id641k = tmp.PopUInt64(); if (alreadyReceived.Contains(id641k)) { alreadyReceived.Remove(id641k); //Only keep 1000 messages in pool } alreadyReceived.Add(id64); tmp = new NetMessage(); tmp.Push((byte)RU_MessageType.ACK); tmp.Push(id); _socket.BeginSend(tmp.ToArray(), tmp.GetLength(), source, new AsyncCallback(SentCallback), _socket); NetMessage tmp2 = new NetMessage(nm, 5); OnMessageReceivedAsync(source, tmp2, true); }
public NetMessage(NetMessage source, int startFrom = 0) { buff = new byte[source.GetLength() - startFrom]; Buffer.BlockCopy(source.ToArray(), startFrom, buff, 0, source.GetLength()-startFrom); }