InGame update messages include a timestamp which is passed to the ClientRead methods
Now only used in character position syncing, but some other entities may also have an use for it (e.g. discarding outdated data)
This commit is contained in:
@@ -1820,8 +1820,6 @@ namespace Barotrauma
|
||||
public virtual void ServerWrite(NetOutgoingMessage msg, Client c)
|
||||
{
|
||||
msg.Write(ID);
|
||||
//todo: only write this once in each packet, not for each character
|
||||
msg.Write((float)NetTime.Now);
|
||||
|
||||
msg.Write(AnimController.Dir > 0.0f);
|
||||
|
||||
@@ -1829,7 +1827,7 @@ namespace Barotrauma
|
||||
msg.Write(SimPosition.Y);
|
||||
}
|
||||
|
||||
public static void ClientReadStatic(NetIncomingMessage msg)
|
||||
public static void ClientReadStatic(NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
UInt16 id = msg.ReadUInt16();
|
||||
var character = Entity.FindEntityByID(id) as Character;
|
||||
@@ -1838,25 +1836,24 @@ namespace Barotrauma
|
||||
{
|
||||
//skip through the rest of the message
|
||||
//todo: a better way to skip through the message?
|
||||
msg.Position += 32 + 1 + 32 + 32;
|
||||
msg.Position += 1 + 32 + 32;
|
||||
}
|
||||
else
|
||||
{
|
||||
character.ClientRead(msg);
|
||||
character.ClientRead(msg, sendingTime);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ClientRead(NetIncomingMessage msg)
|
||||
public virtual void ClientRead(NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
float sendingTime = msg.ReadSingle();
|
||||
//float sendingTime = msg.ReadSingle();
|
||||
bool facingRight = msg.ReadBoolean();
|
||||
Vector2 pos = new Vector2(msg.ReadFloat(), msg.ReadFloat());
|
||||
|
||||
|
||||
var posInfo = new PosInfo(
|
||||
pos,
|
||||
facingRight ? Direction.Right : Direction.Left,
|
||||
sendingTime - msg.SenderConnection.RemoteTimeOffset);
|
||||
sendingTime);
|
||||
|
||||
int index = 0;
|
||||
while (index < memPos.Count && posInfo.Timestamp > memPos[index].Timestamp)
|
||||
|
||||
@@ -662,7 +662,7 @@ namespace Barotrauma.Items.Components
|
||||
}
|
||||
}
|
||||
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg)
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
bool isDocked = msg.ReadBoolean();
|
||||
|
||||
|
||||
@@ -499,7 +499,7 @@ namespace Barotrauma.Items.Components
|
||||
msg.WriteRangedSingle(stuck, 0.0f, 100.0f, 8);
|
||||
}
|
||||
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg)
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
SetState(msg.ReadBoolean(), true);
|
||||
Stuck = msg.ReadRangedSingle(0.0f, 100.0f, 8);
|
||||
|
||||
@@ -666,7 +666,7 @@ namespace Barotrauma.Items.Components
|
||||
public virtual void ServerRead(NetIncomingMessage msg, Client c) { }
|
||||
|
||||
public virtual void ServerWrite(NetOutgoingMessage msg, Client c) { }
|
||||
public virtual void ClientRead(NetIncomingMessage msg) { }
|
||||
public virtual void ClientRead(NetIncomingMessage msg, float sendingTime) { }
|
||||
|
||||
public virtual XElement Save(XElement parentElement)
|
||||
{
|
||||
|
||||
@@ -216,7 +216,7 @@ namespace Barotrauma.Items.Components
|
||||
msg.Write(IsActive);
|
||||
}
|
||||
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg)
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
FlowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f;
|
||||
IsActive = msg.ReadBoolean();
|
||||
|
||||
@@ -427,7 +427,7 @@ namespace Barotrauma.Items.Components
|
||||
msg.Write(IsActive);
|
||||
}
|
||||
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg)
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
IsActive = msg.ReadBoolean();
|
||||
isActiveTickBox.Selected = IsActive;
|
||||
|
||||
@@ -568,7 +568,7 @@ namespace Barotrauma.Items.Components
|
||||
msg.WriteRangedSingle(fissionRate, 0.0f, 100.0f, 8);
|
||||
}
|
||||
|
||||
public override void ClientRead(NetIncomingMessage msg)
|
||||
public override void ClientRead(NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
Temperature = msg.ReadRangedSingle(0.0f, 10000.0f, 16);
|
||||
|
||||
|
||||
@@ -445,7 +445,7 @@ namespace Barotrauma.Items.Components
|
||||
}
|
||||
}
|
||||
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg)
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
AutoPilot = msg.ReadBoolean();
|
||||
|
||||
|
||||
@@ -269,7 +269,7 @@ namespace Barotrauma.Items.Components
|
||||
msg.WriteRangedSingle(chargeRatio, 0.0f, 1.0f, 8);
|
||||
}
|
||||
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg)
|
||||
public override void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
RechargeSpeed = msg.ReadRangedSingle(0.0f, 1.0f, 8) * maxRechargeSpeed;
|
||||
|
||||
|
||||
@@ -1553,7 +1553,7 @@ namespace Barotrauma
|
||||
}
|
||||
|
||||
public void ServerWrite(NetOutgoingMessage msg, Client c) { }
|
||||
public void ClientRead(NetIncomingMessage msg) { }
|
||||
public void ClientRead(NetIncomingMessage msg, float sendingTime) { }
|
||||
|
||||
public void WriteSpawnData(NetOutgoingMessage msg)
|
||||
{
|
||||
|
||||
@@ -833,7 +833,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public void ClientRead(NetIncomingMessage msg)
|
||||
public void ClientRead(NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
for (int i = 0; i < sections.Count(); i++)
|
||||
{
|
||||
|
||||
@@ -1079,7 +1079,7 @@ namespace Barotrauma
|
||||
msg.Write(Velocity.Y);
|
||||
}
|
||||
|
||||
public void ClientRead(NetIncomingMessage msg)
|
||||
public void ClientRead(NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
subBody.TargetPosition = new Vector2(msg.ReadSingle(), msg.ReadSingle());
|
||||
subBody.Velocity = new Vector2(msg.ReadSingle(), msg.ReadSingle());
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public void ClientRead(Lidgren.Network.NetIncomingMessage message)
|
||||
public void ClientRead(Lidgren.Network.NetIncomingMessage message, float sendingTime)
|
||||
{
|
||||
if (GameMain.Server != null) return;
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public void ClientRead(Lidgren.Network.NetIncomingMessage message)
|
||||
public void ClientRead(Lidgren.Network.NetIncomingMessage message, float sendingTime)
|
||||
{
|
||||
if (GameMain.Server != null) return;
|
||||
|
||||
|
||||
@@ -696,6 +696,8 @@ namespace Barotrauma.Networking
|
||||
|
||||
private void ReadIngameUpdate(NetIncomingMessage inc)
|
||||
{
|
||||
float sendingTime = inc.ReadFloat() - inc.SenderConnection.RemoteTimeOffset;
|
||||
|
||||
ServerNetObject objHeader;
|
||||
while ((objHeader = (ServerNetObject)inc.ReadByte()) != ServerNetObject.END_OF_MESSAGE)
|
||||
{
|
||||
@@ -705,24 +707,18 @@ namespace Barotrauma.Networking
|
||||
lastSentChatMsgID = inc.ReadUInt32();
|
||||
break;
|
||||
case ServerNetObject.CHARACTER_POSITION:
|
||||
//bool dead = inc.ReadBoolean();
|
||||
Character.ClientReadStatic(inc);
|
||||
Character.ClientReadStatic(inc, sendingTime);
|
||||
inc.ReadPadBits();
|
||||
//if (Character.Controlled != null)
|
||||
//{
|
||||
// if (dead && !Character.Controlled.IsDead)
|
||||
// Character.Controlled.Kill(CauseOfDeath.Damage);
|
||||
//}
|
||||
break;
|
||||
case ServerNetObject.CHAT_MESSAGE:
|
||||
ChatMessage.ClientRead(inc);
|
||||
break;
|
||||
case ServerNetObject.ENTITY_SPAWN:
|
||||
Item.Spawner.ClientRead(inc);
|
||||
Item.Spawner.ClientRead(inc, sendingTime);
|
||||
inc.ReadPadBits();
|
||||
break;
|
||||
case ServerNetObject.ENTITY_REMOVE:
|
||||
Item.Remover.ClientRead(inc);
|
||||
Item.Remover.ClientRead(inc, sendingTime);
|
||||
inc.ReadPadBits();
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -625,6 +625,8 @@ namespace Barotrauma.Networking
|
||||
{
|
||||
NetOutgoingMessage outmsg = server.CreateMessage();
|
||||
outmsg.Write((byte)ServerPacketHeader.UPDATE_INGAME);
|
||||
|
||||
outmsg.Write((float)NetTime.Now);
|
||||
|
||||
outmsg.Write((byte)ServerNetObject.SYNC_IDS);
|
||||
outmsg.Write(c.lastSentChatMsgID); //send this to client so they know which chat messages weren't received by the server
|
||||
|
||||
@@ -22,6 +22,6 @@ namespace Barotrauma.Networking
|
||||
UInt32 NetStateID { get; }
|
||||
|
||||
void ServerWrite(NetOutgoingMessage msg, Client c);
|
||||
void ClientRead(NetIncomingMessage msg);
|
||||
void ClientRead(NetIncomingMessage msg, float sendingTime);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user