public override void OnDisconnected(NetConnection connection, string reason, bool lostConnection) { charSnapshotSystem.Clear(); snapshotSystem.Clear(); pid = 0; lastServerPId = 0; gotPacket = false; timeSinceSend = 0; rtt = 0; measuringRTT = false; lastOutboundPacketStats = new SnapshotStats(); WorldSnapshot = null; base.OnDisconnected(connection, reason, lostConnection); }
public SnapshotNetComponent(AOSServer server) : base(server) { snapshotSystem = new SnapshotSystem(server); charSnapshotSystem = new CharacterSnapshotSystem(this, snapshotSystem); ConnectionStates = new Dictionary <NetConnection, NetConnectionSnapshotState>(); objectComponent = server.GetComponent <ObjectNetComponent>(); objectComponent.OnCreatableInstantiated += ObjectComponent_OnCreatableInstantiated; objectComponent.OnCreatableDestroyed += ObjectComponent_OnCreatableDestroyed; DashCMD.AddScreen(new DashCMDScreen("snapshot", "Displays information about the snapshot system.", true, (screen) => { try { foreach (KeyValuePair <NetConnection, NetConnectionSnapshotState> pair in ConnectionStates) { SnapshotStats stats = pair.Value.Stats; screen.WriteLine("[{0}]:", pair.Key); screen.WriteLine("Snapshot Round-Trip Time: {0}", pair.Value.RoundTripTime); screen.WriteLine("PacketHeader: {0} bytes", stats.PacketHeader); screen.WriteLine("Acks: {0} bytes", stats.Acks); screen.WriteLine("PlayerData: {0} bytes", stats.PlayerData); screen.WriteLine("TerrainData: {0} bytes", stats.TerrainData); screen.WriteLine("Total: {0} bytes", stats.Total); screen.WriteLine(""); } } catch (Exception) { } }) { SleepTime = 30 }); DashCMD.SetCVar("sv_tickrate", DEFAULT_TICKRATE); DashCMD.SetCVar("sv_await_cl_snap", false); DashCMD.SetCVar <ushort>("ag_max_cl_tickrate", 100); DashCMD.SetCVar("ag_cl_force_await_snap", false); //DashCMD.SetCVar("sv_tickrate", 25); //DashCMD.SetCVar("sv_await_cl_snap", true); //DashCMD.SetCVar<ushort>("ag_max_cl_tickrate", 30); //DashCMD.SetCVar("ag_cl_force_await_snap", true); }
public NetConnectionSnapshotState(SnapshotSystem snapshotSystem, NetConnection conn) { WorldSnapshot = new WorldSnapshot(snapshotSystem, conn); Connection = conn; Stats = new SnapshotStats(); }
void SendSnapshotTo(NetConnection conn, NetConnectionSnapshotState connState, float deltaTime) { WorldSnapshot worldSnapshot = connState.WorldSnapshot; ushort epid = connState.OutboundSnapshotId; connState.OutboundSnapshotId++; //connState.TimeSinceLastSend -= deltaTime; //connState.GotPacket = false; connState.WorldSnapshot.MaxClientTickrate = DashCMD.GetCVar <ushort>("ag_max_cl_tickrate"); connState.WorldSnapshot.ForceSnapshotAwait = DashCMD.GetCVar <bool>("ag_cl_force_await_snap"); NetOutboundPacket packet = new NetOutboundPacket(NetDeliveryMethod.Unreliable); packet.SendImmediately = true; int size = packet.Length; packet.Write((byte)CustomPacketType.Snapshot); packet.Write(epid); int _packetheader = packet.Length - size; size = packet.Length; // Write snapshot system data snapshotSystem.OnOutbound(packet, conn); int _acks = packet.Length - size; size = packet.Length; // Write players charSnapshotSystem.OnServerOutbound(packet, connState); // Invoke event if (OnWorldSnapshotOutbound != null) { OnWorldSnapshotOutbound(this, worldSnapshot); } // Serialize snapshot NetBuffer buffer = new NetBuffer(); worldSnapshot.Serialize(buffer); packet.Write((ushort)buffer.Length); packet.WriteBytes(buffer.Data, 0, buffer.Length); int _playerdata = packet.Length - size; size = packet.Length; int _terraindata = connState.WorldSnapshot.TerrainSnapshot.LastByteSize; _playerdata -= _terraindata; // Send packet conn.SendPacket(packet); if (connState != null) { SnapshotStats stats = connState.Stats; stats.PacketHeader = _packetheader; stats.Acks = _acks; stats.PlayerData = _playerdata; stats.TerrainData = _terraindata; } }