Example #1
0
        public static void addDeferred(Aircraft.Action command, String id, params Object[] args)
        {
            ClientRecord cr = senders[id];

            addData(command, cr.deferred, args);
            cr.deferredCount++;
        }
Example #2
0
        /// <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();
        }
Example #3
0
 /// <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();
 }
Example #4
0
        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);
        }