public static void addDeferred(Aircraft.Action command, String id, params Object[] args) { ClientRecord cr = senders[id]; addData(command, cr.deferred, args); cr.deferredCount++; }
/// <param name="forceUpdate">Set to true if you want to send the data, even if it is a duplicate. This is useful if you want to send /// the final data string to the server.</param> public static void sendObjectUpdate(MemoryStream stream, String id, bool forceUpdate) { ClientRecord cr = senders[id]; if (!forceUpdate && stream.Length != cr.previousObjectUpdate.Length) { bool areEqual = true; for (int i = 1; i <= stream.Length; i++) { areEqual = stream.ReadByte() == cr.previousObjectUpdate.ReadByte(); if (!areEqual) { break; } } if (areEqual) { return; } } cr.setPreviousObjectUpdate(stream); CSCommon.sendData(client, stream); stream.Close(); }
/// <summary> /// Adds a catalog for the given id. /// </summary> /// <param name="id">The id to add</param> public static void addSender(String id) { senders[id] = new ClientRecord(); }
public static MemoryStream completeBuild(Projector source, bool includeCommonAttributes) { MemoryStream mem = new MemoryStream(); BinaryWriter writer = new BinaryWriter(mem); ClientRecord cr = senders[source.id]; Aircraft a = null; if (source is Aircraft) { a = (Aircraft)source; } System.Diagnostics.Trace.WriteLine("Called complete build"); if (a != null) { System.Diagnostics.Trace.WriteLine("with " + a.name); } if (includeCommonAttributes && source.role == OnlineRole.bot) { writer.Write((sbyte)3); } else { writer.Write((sbyte)2); } writer.Flush(); long pos = mem.Position; writer.Write((int)0); writer.Write(source.id); writer.Flush(); long numArgs = mem.Position; writer.Write((short)0); short size = 2; writer.Write((sbyte)1); writer.Write(source.damage); writer.Write((sbyte)2); writer.Write(source.direction); if (includeCommonAttributes) { writer.Write((sbyte)3); writer.Write(source.x); writer.Write((sbyte)4); writer.Write(source.y); writer.Write((sbyte)5); writer.Write(source.z); writer.Write((sbyte)6); writer.Write(source.speed); size += 4; if (a != null) { //If this is object update for aircraft, need to send //throttle and afterburner status also writer.Write((sbyte)7); writer.Write(a.getThrottle()); writer.Write((sbyte)8); writer.Write(a.getRunwayStatus()); writer.Write((sbyte)9); writer.Write(a.getAfterburnerStatus()); writer.Write((sbyte)10); writer.Write(a.getCloakStatus()); size += 4; /* * if (newJoin) { * writer.Write('j'); * writer.Write(a.getWeight()); * writer.Write('k'); * writer.Write(a.getMaxWeight()); * writer.Write('l'); * writer.Write(a.getFuelWeight()); * writer.Write('m'); * writer.Write(a.getMaxFuelWeight()); * newJoin = false; * size += 4; * } * */ } //if sending update for aircraft } if (includeCommonAttributes) { cr.dataCount += cr.deferredCount; } writer.Write((short)cr.dataCount); if (cr.dataCount > 0) { writer.Flush(); cr.data.WriteTo(mem); cr.data.SetLength(0); cr.dataCount = 0; } if (includeCommonAttributes && cr.deferredCount > 0) { writer.Flush(); cr.deferred.WriteTo(mem); cr.deferred.SetLength(0); cr.deferredCount = 0; } mem.Position = numArgs; writer.Write(size); mem.Position = pos; writer.Write((int)mem.Length); writer.Flush(); mem.Position = 0; return(mem); }