public void Encode( RailBitBuffer buffer, int maxTotalSize, int maxIndividualSize, Action <T, RailBitBuffer> encode) { // TODO: prevent loss of data if there are too many pending or the individual size is too large. buffer.PackToSize( maxTotalSize, maxIndividualSize, pending, encode, val => sent.Add(val)); }
private void EncodeView(RailBitBuffer buffer, Tick localTick, int reservedBytes) { buffer.PackToSize( RailConfig.PACKCAP_MESSAGE_TOTAL - reservedBytes, int.MaxValue, view.GetOrdered(localTick), (pair, buf) => { buf.WriteEntityId(pair.Key); // Write: [EntityId] buf.WriteTick(pair.Value.LastReceivedTick); // Write: [LastReceivedTick] // (Local tick not transmitted) buf.WriteBool(pair.Value.IsFrozen); // Write: [IsFrozen] }); }
/// <summary> /// Writes as many events as possible up to maxSize and returns the number /// of events written in the batch. Also increments the total counter. /// </summary> private static void EncodeEvents( RailPacketOutgoing packet, IRailEventConstruction eventCreator, RailBitBuffer buffer, int maxSize) { packet.EventsWritten += buffer.PackToSize( maxSize, RailConfig.MAXSIZE_EVENT, packet.GetNextEvents(), (evnt, buf) => evnt.Encode( eventCreator.EventTypeCompressor, buf, packet.SenderTick), evnt => evnt.RegisterSent()); }
protected void EncodeView(RailBitBuffer buffer, int reservedBytes) { buffer.PackToSize( RailConfig.PACKCAP_MESSAGE_TOTAL - reservedBytes, int.MaxValue, this.view.GetOrdered(), (pair) => { buffer.WriteEntityId(pair.Key); // Write: [EntityId] buffer.WriteTick(pair.Value.Tick); // Write: [Tick] buffer.WriteBool(pair.Value.IsFrozen); // Write: [IsFrozen] }); #endif }