static void SendHandler(ulong remoteUser, byte[] data, int byteCount, P2PMessageEnum msgType, int channel) { if (!Peer2Peer.SendPacket(remoteUser, data, byteCount, msgType, channel)) { System.Diagnostics.Debug.Fail("P2P packet send fail"); } }
void SendHandler(ulong remoteUser, byte[] data, int byteCount, P2PMessageEnum msgType, int channel) { if (msgType == P2PMessageEnum.ReliableWithBuffering) { m_pendingFlushes.Add(remoteUser); } ByteCountSent += byteCount; if (!Peer2Peer.SendPacket(remoteUser, data, byteCount, msgType, channel)) { System.Diagnostics.Debug.Fail("P2P packet send fail"); } }
public void SendMessage <TMessage>(ref TMessage msg, List <ulong> recipients, MyTransportMessageEnum messageType, bool includeSelf) where TMessage : struct { if (recipients.Count == 0 && !includeSelf) { return; } var msgId = GetId <TMessage>(messageType); ITransportCallback <TMessage> c = (ITransportCallback <TMessage>)m_callbacks[msgId.Item1].Callback; P2PMessageEnum sendType = msgId.Item2; m_sendStream.Position = 0; m_sendStream.WriteByte((byte)MyMessageId.OLD_GAME_EVENT); m_sendStream.WriteUShort(msgId.Item1); c.Write(m_sendStream, ref msg); const int mtu = 1200; if ((sendType == P2PMessageEnum.Unreliable || sendType == P2PMessageEnum.UnreliableNoDelay) && m_sendStream.Position > mtu) { Debug.Fail("Sending unreliable message as reliable, because it's bigger than MTU, message type: " + FindDebugName(msgId.Item1)); sendType = P2PMessageEnum.ReliableWithBuffering; } if (sendType == P2PMessageEnum.Reliable) // Always with buffering { sendType = P2PMessageEnum.ReliableWithBuffering; } Stats.Network.WriteFormat(StatName <TMessage> .Name, (int)m_sendStream.Position, VRage.Stats.MyStatTypeEnum.CounterSum, 1000, 0); if (!MySandboxGame.IsDedicated) { LogStats(SendStats, TypeNameHelper <TMessage> .Name, (int)m_sendStream.Position, recipients.Count, msgId.Item2); } if (includeSelf) { MyTrace.Send(TraceWindow.Multiplayer, "Loopback: " + typeof(TMessage).Name); m_loopback(m_sendStream.Data, (int)m_sendStream.Position, Sync.MyId); } foreach (var sendTo in recipients) { Debug.Assert(Sync.MultiplayerActive); TraceMessage("Sending: ", msg.ToString(), sendTo, m_sendStream.Position, sendType); SendMessage(m_sendStream, sendType, sendTo, m_channel); } }
public void EnqueueSend(ulong sendTo, byte[] data, int length, P2PMessageEnum sendType, int channel) { var msg = GetMessage(); msg.Timestamp = DateTime.UtcNow; if (msg.Data.Length < length) { Array.Resize(ref msg.Data, length); } Array.Copy(data, 0, msg.Data, 0, length); msg.Length = length; msg.SendType = sendType; msg.UserId = sendTo; msg.Channel = channel; m_sendQueue.Enqueue(msg); }
void TraceMessage(string text, string messageText, ulong userId, long messageSize, P2PMessageEnum sendType) { string playerName; Sandbox.Game.World.MyNetworkClient player; if (MyMultiplayer.Static != null && MyMultiplayer.Static.SyncLayer.Clients.TryGetClient(userId, out player)) { playerName = player.DisplayName; } else { playerName = userId.ToString(); } MyTrace.Send(TraceWindow.Multiplayer, text + messageText, playerName + ", " + messageSize + " B"); if (sendType == P2PMessageEnum.Reliable || sendType == P2PMessageEnum.ReliableWithBuffering) { MyTrace.Send(TraceWindow.MultiplayerFiltered, text + messageText, playerName + ", " + messageSize + " B"); } }
public MessageIdAttribute(ushort messageId, P2PMessageEnum sendType) { Debug.Assert(messageId < ushort.MaxValue / 4, "Message ID must be smaller than ushort.MaxValue/4, it's used for Request/Success/Failure flags"); MessageId = messageId; SendType = sendType; }
void SendMessage(ByteStream sendStream, P2PMessageEnum sendType, ulong sendTo, int channel) { SendHandler(sendTo, sendStream.Data, (int)sendStream.Position, sendType, channel); }
private static void LogStats(Dictionary <string, NetworkStat> logTo, string name, int size, int recipientCount, P2PMessageEnum messageType) { NetworkStat stat; if (!logTo.TryGetValue(name, out stat)) { stat = new NetworkStat(); logTo.Add(name, stat); } stat.TotalSize += size * recipientCount; stat.MessageCount += recipientCount; stat.IsReliable = messageType == P2PMessageEnum.Reliable || messageType == P2PMessageEnum.ReliableWithBuffering; stat.UniqueMessageCount++; }
public unsafe static bool SendPacket(ulong remoteUser, byte[] data, int byteCount, P2PMessageEnum msgType, int channel) { // int dataPtr_07_cp_1 = 0; // ISteamNetworking* remoteUser2 = Peer2Peer.GetSteamNetworking(); // CSteamID data2 = remoteUser; // return calli(System.Byte modopt(System.Runtime.CompilerServices.CompilerMarshalOverride) modopt(System.Runtime.CompilerServices.CallConvCdecl)(System.IntPtr,CSteamID,System.Void modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt32,EP2PSend,System.Int32), remoteUser2, data2, ref data[dataPtr_07_cp_1], byteCount, msgType, channel, *(*(long*)remoteUser2)); return false; }
public unsafe static bool SendPacket(ulong remoteUser, byte* dataPtr, int byteCount, P2PMessageEnum msgType, int channel) { // CSteamID byteCount2 = remoteUser; // if (<Module>.CSteamID.IsValid(ref byteCount2) != null) // { // ISteamNetworking* remoteUser2 = Peer2Peer.GetSteamNetworking(); // CSteamID dataPtr2 = remoteUser; // return calli(System.Byte modopt(System.Runtime.CompilerServices.CompilerMarshalOverride) modopt(System.Runtime.CompilerServices.CallConvCdecl)(System.IntPtr,CSteamID,System.Void modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt32,EP2PSend,System.Int32), remoteUser2, dataPtr2, dataPtr, byteCount, msgType, channel, *(*(long*)remoteUser2)); // } return false; }
public unsafe static bool SendPacket(ulong remoteUser, byte[] data, int byteCount, P2PMessageEnum msgType, int channel) { // int dataPtr_07_cp_1 = 0; // ISteamNetworking* remoteUser2 = Peer2Peer.GetSteamNetworking(); // CSteamID data2 = remoteUser; // return calli(System.Byte modopt(System.Runtime.CompilerServices.CompilerMarshalOverride) modopt(System.Runtime.CompilerServices.CallConvCdecl)(System.IntPtr,CSteamID,System.Void modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt32,EP2PSend,System.Int32), remoteUser2, data2, ref data[dataPtr_07_cp_1], byteCount, msgType, channel, *(*(long*)remoteUser2)); return(false); }
public unsafe static bool SendPacket(ulong remoteUser, byte *dataPtr, int byteCount, P2PMessageEnum msgType, int channel) { // CSteamID byteCount2 = remoteUser; // if (<Module>.CSteamID.IsValid(ref byteCount2) != null) // { // ISteamNetworking* remoteUser2 = Peer2Peer.GetSteamNetworking(); // CSteamID dataPtr2 = remoteUser; // return calli(System.Byte modopt(System.Runtime.CompilerServices.CompilerMarshalOverride) modopt(System.Runtime.CompilerServices.CallConvCdecl)(System.IntPtr,CSteamID,System.Void modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt32,EP2PSend,System.Int32), remoteUser2, dataPtr2, dataPtr, byteCount, msgType, channel, *(*(long*)remoteUser2)); // } return(false); }