ItemInventories don't have own ID's anymore but rely on owner ID, relaying reliablemessages through server
This commit is contained in:
@@ -649,7 +649,6 @@ namespace Barotrauma.Networking
|
||||
string newName = inc.ReadString();
|
||||
int ID = inc.ReadInt32();
|
||||
bool isFemale = inc.ReadBoolean();
|
||||
int inventoryID = inc.ReadInt32();
|
||||
|
||||
int headSpriteID = inc.ReadInt32();
|
||||
|
||||
@@ -683,7 +682,6 @@ namespace Barotrauma.Networking
|
||||
new Character(ch, closestWaypoint, !isMyCharacter);
|
||||
|
||||
character.ID = ID;
|
||||
character.Inventory.ID = inventoryID;
|
||||
|
||||
character.GiveJobItems(closestWaypoint);
|
||||
|
||||
|
||||
@@ -282,10 +282,10 @@ namespace Barotrauma.Networking
|
||||
{
|
||||
ReadMessage(inc);
|
||||
}
|
||||
catch
|
||||
catch (Exception e)
|
||||
{
|
||||
#if DEBUG
|
||||
DebugConsole.ThrowError("Failed to read incoming message");
|
||||
DebugConsole.ThrowError("Failed to read incoming message", e);
|
||||
#endif
|
||||
|
||||
continue;
|
||||
@@ -440,10 +440,13 @@ namespace Barotrauma.Networking
|
||||
return;
|
||||
}
|
||||
|
||||
bool isReliable = false;
|
||||
if (packetType == (byte)PacketTypes.ReliableMessage)
|
||||
{
|
||||
if (!dataSender.ReliableChannel.CheckMessage(inc)) return;
|
||||
packetType = inc.ReadByte();
|
||||
|
||||
isReliable = true;
|
||||
}
|
||||
|
||||
switch (packetType)
|
||||
@@ -452,21 +455,40 @@ namespace Barotrauma.Networking
|
||||
if (!gameStarted) break;
|
||||
if (!NetworkEvent.ReadData(inc)) break;
|
||||
|
||||
outmsg = server.CreateMessage();
|
||||
outmsg.Write(inc);
|
||||
|
||||
List<NetConnection> recipients = new List<NetConnection>();
|
||||
|
||||
foreach (Client client in connectedClients)
|
||||
{
|
||||
if (client.Connection == inc.SenderConnection) continue;
|
||||
if (!client.inGame) continue;
|
||||
|
||||
recipients.Add(client.Connection);
|
||||
}
|
||||
|
||||
List<Client> recipients = connectedClients.FindAll(c => c.Connection != inc.SenderConnection && c.inGame);
|
||||
if (recipients.Count == 0) break;
|
||||
server.SendMessage(outmsg, recipients, inc.DeliveryMethod, 0);
|
||||
|
||||
//foreach (Client client in connectedClients)
|
||||
//{
|
||||
// if (client.Connection == inc.SenderConnection) continue;
|
||||
// if (!client.inGame) continue;
|
||||
|
||||
// recipients.Add(client.Connection);
|
||||
//}
|
||||
|
||||
if (isReliable)
|
||||
{
|
||||
Debug.WriteLine("receiver reliable networkevent");
|
||||
foreach (Client c in recipients)
|
||||
{
|
||||
var reliableMessage = c.ReliableChannel.CreateMessage();
|
||||
inc.Position = 8+16;
|
||||
byte[] messageBytes = inc.ReadBytes(inc.LengthBytes-3);
|
||||
reliableMessage.InnerMessage.Write(messageBytes);
|
||||
|
||||
c.ReliableChannel.SendMessage(reliableMessage, c.Connection);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
outmsg = server.CreateMessage();
|
||||
outmsg.Write(inc);
|
||||
|
||||
List<NetConnection> recipientConnections = new List<NetConnection>();
|
||||
foreach (Client c in recipients) recipientConnections.Add(c.Connection);
|
||||
|
||||
server.SendMessage(outmsg, recipientConnections, inc.DeliveryMethod, 0);
|
||||
}
|
||||
|
||||
break;
|
||||
case (byte)PacketTypes.Chatmessage:
|
||||
@@ -628,36 +650,35 @@ namespace Barotrauma.Networking
|
||||
|
||||
if (recipients.Count == 0) return;
|
||||
|
||||
|
||||
|
||||
foreach (NetworkEvent networkEvent in NetworkEvent.events)
|
||||
{
|
||||
Entity e = Entity.FindEntityByID(networkEvent.ID);
|
||||
if (e == null) continue;
|
||||
NetOutgoingMessage message = server.CreateMessage();
|
||||
message.Write((byte)PacketTypes.NetworkEvent);
|
||||
//if (!networkEvent.IsClient) continue;
|
||||
|
||||
if (!networkEvent.FillData(message))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//Entity e = Entity.FindEntityByID(networkEvent.ID);
|
||||
//if (e == null) continue;
|
||||
if (networkEvent.IsImportant)
|
||||
{
|
||||
foreach (Client c in recipients)
|
||||
{
|
||||
ReliableMessage reliableMessage = c.ReliableChannel.CreateMessage();
|
||||
reliableMessage.InnerMessage.Write((byte)PacketTypes.NetworkEvent);
|
||||
|
||||
if (!networkEvent.FillData(reliableMessage.InnerMessage))
|
||||
{
|
||||
break;
|
||||
}
|
||||
message.Position = 0;
|
||||
reliableMessage.InnerMessage.Write(message.ReadBytes(message.LengthBytes));
|
||||
|
||||
c.ReliableChannel.SendMessage(reliableMessage, c.Connection);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NetOutgoingMessage message = server.CreateMessage();
|
||||
message.Write((byte)PacketTypes.NetworkEvent);
|
||||
//if (!networkEvent.IsClient) continue;
|
||||
|
||||
if (!networkEvent.FillData(message))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (server.ConnectionsCount>0)
|
||||
{
|
||||
@@ -1050,7 +1071,6 @@ namespace Barotrauma.Networking
|
||||
message.Write(name);
|
||||
message.Write(character.ID);
|
||||
message.Write(character.Info.Gender == Gender.Female);
|
||||
message.Write(character.Inventory.ID);
|
||||
|
||||
message.Write(character.Info.HeadSpriteId);
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace Barotrauma.Networking
|
||||
return false;
|
||||
}
|
||||
|
||||
System.Diagnostics.Debug.WriteLine("Networkevent entity: "+e.ToString());
|
||||
//System.Diagnostics.Debug.WriteLine("Networkevent entity: "+e.ToString());
|
||||
|
||||
//System.Diagnostics.Debug.WriteLine("new message: " + eventType +" - "+e);
|
||||
try
|
||||
|
||||
@@ -79,16 +79,14 @@ namespace Barotrauma.Networking.ReliableMessages
|
||||
|
||||
public ReliableMessage CreateMessage()
|
||||
{
|
||||
if (messageCount == ushort.MaxValue) messageCount = 0;
|
||||
messageCount++;
|
||||
ushort messageID = (messageCount==ushort.MaxValue) ? (ushort)0 : (ushort)(messageCount + 1);
|
||||
|
||||
NetOutgoingMessage message = sender.CreateMessage();
|
||||
|
||||
var reliableMessage = new ReliableMessage(message, messageCount);
|
||||
messageBuffer.Add(reliableMessage.ID, reliableMessage);
|
||||
var reliableMessage = new ReliableMessage(message, messageID);
|
||||
|
||||
message.Write((byte)PacketTypes.ReliableMessage);
|
||||
message.Write(messageCount);
|
||||
message.Write(messageID);
|
||||
|
||||
int bufferSize=100;
|
||||
if (messageBuffer.Count>bufferSize)
|
||||
@@ -117,10 +115,7 @@ namespace Barotrauma.Networking.ReliableMessages
|
||||
messageBuffer.Remove(i);
|
||||
if (i == ushort.MaxValue) break;
|
||||
Debug.WriteLine("removing message " + i);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return reliableMessage;
|
||||
@@ -133,6 +128,11 @@ namespace Barotrauma.Networking.ReliableMessages
|
||||
ackInterval = 0.0f;
|
||||
ackTimer = connection.AverageRoundtripTime;
|
||||
|
||||
messageBuffer.Add(message.ID, message);
|
||||
|
||||
if (messageCount == ushort.MaxValue) messageCount = 0;
|
||||
messageCount++;
|
||||
|
||||
message.SaveInnerMessage();
|
||||
|
||||
sender.SendMessage(message.InnerMessage, connection, NetDeliveryMethod.Unreliable, 0);
|
||||
@@ -172,7 +172,7 @@ namespace Barotrauma.Networking.ReliableMessages
|
||||
|
||||
if (ackTimer > 0.0f) return;
|
||||
|
||||
Debug.WriteLine("Sending ack message: "+messageCount);
|
||||
//Debug.WriteLine("Sending ack message: "+messageCount);
|
||||
|
||||
NetOutgoingMessage message = sender.CreateMessage();
|
||||
message.Write((byte)PacketTypes.Ack);
|
||||
@@ -337,7 +337,7 @@ namespace Barotrauma.Networking.ReliableMessages
|
||||
//id matches, all good
|
||||
if (messageId == lastMessageID)
|
||||
{
|
||||
Debug.WriteLine("Received ack message: " + messageId + ", all good");
|
||||
//Debug.WriteLine("Received ack message: " + messageId + ", all good");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user