Пример #1
0
        public bool ReadEntityValue(AUT_WH.MajorDomoProtocol.EntityValue _value)
        {
            bool modified = false;
            int  dataSize = _value.ValueLength;

            // is this a variable size value?
            if ((dataSize != m_data.Length) && !m_fixedSize)
            {
                // yes: adapt buffer
                m_data   = new byte[dataSize];
                m_buffer = new FlatBuffers.ByteBuffer(m_data);
                modified = true;
            }
            else
            {
                // no: limit to data size
                dataSize = Math.Min(dataSize, m_data.Length);
            }

            // copy over the bytes, checking for changes
            for (int i = 0; i < dataSize; i++)
            {
                byte b = (byte)_value.Value(i);
                modified |= (m_data[i] != b);
                m_data[i] = b;
            }
            m_updated |= modified;
            return(modified);
        }
        protected RecordBatch ReadRecordBatch()
        {
            ReadSchema();

            int messageLength = ReadMessageLength(throwOnFullRead: false);

            if (messageLength == 0)
            {
                // reached end
                return(null);
            }

            RecordBatch result = null;

            ArrayPool <byte> .Shared.RentReturn(messageLength, messageBuff =>
            {
                int bytesRead = BaseStream.ReadFullBuffer(messageBuff);
                EnsureFullRead(messageBuff, bytesRead);

                Flatbuf.Message message = Flatbuf.Message.GetRootAsMessage(CreateByteBuffer(messageBuff));

                int bodyLength = checked ((int)message.BodyLength);

                IMemoryOwner <byte> bodyBuffOwner = _allocator.Allocate(bodyLength);
                Memory <byte> bodyBuff            = bodyBuffOwner.Memory.Slice(0, bodyLength);
                bytesRead = BaseStream.ReadFullBuffer(bodyBuff);
                EnsureFullRead(bodyBuff, bytesRead);

                FlatBuffers.ByteBuffer bodybb = CreateByteBuffer(bodyBuff);
                result = CreateArrowObjectFromMessage(message, bodybb, bodyBuffOwner);
            });

            return(result);
        }
Пример #3
0
        private static ArrayData LoadVariableField(Field field,
                                                   Flatbuf.FieldNode fieldNode,
                                                   Flatbuf.RecordBatch recordBatch,
                                                   FlatBuffers.ByteBuffer bodyData,
                                                   ref int bufferIndex)
        {
            var nullBitmapBuffer = recordBatch.Buffers(bufferIndex++).GetValueOrDefault();
            var offsetBuffer     = recordBatch.Buffers(bufferIndex++).GetValueOrDefault();
            var valueBuffer      = recordBatch.Buffers(bufferIndex++).GetValueOrDefault();

            ArrowBuffer nullArrowBuffer   = BuildArrowBuffer(bodyData, nullBitmapBuffer);
            ArrowBuffer offsetArrowBuffer = BuildArrowBuffer(bodyData, offsetBuffer);
            ArrowBuffer valueArrowBuffer  = BuildArrowBuffer(bodyData, valueBuffer);

            var fieldLength    = (int)fieldNode.Length;
            var fieldNullCount = (int)fieldNode.NullCount;

            if (fieldLength < 0)
            {
                throw new InvalidDataException("Field length must be >= 0"); // TODO: Localize exception message
            }

            if (fieldNullCount < 0)
            {
                throw new InvalidDataException("Null count length must be >= 0"); //TODO: Localize exception message
            }

            var arrowBuff = new[] { nullArrowBuffer, offsetArrowBuffer, valueArrowBuffer };

            return(new ArrayData(field.DataType, fieldLength, fieldNullCount, 0, arrowBuff));
        }
Пример #4
0
        public void test()
        {
            FlatBuffers.ByteBuffer bb = FlatBufferManager.Instance.GetSkillData("skillconfig");
            skillconfigTB          tb = skillconfigTB.GetRootAsskillconfigTB(bb);
            skillconfigTR          tr = (skillconfigTR)tb.SkillconfigTRSByKey(1003);

            Logger.Log($" {tr._id} : {tr._name} : {tr._skillprefab}");
        }
Пример #5
0
 private void OnFlatBuffersUpdated(FlatBuffers.ByteBuffer buffer)
 {
     ClientDataUtil.OnFlatBuffersUpdated(buffer);
     #region 强制回收GC
     System.GC.Collect(System.GC.MaxGeneration, System.GCCollectionMode.Forced);
     System.GC.WaitForPendingFinalizers();
     System.GC.Collect();
     #endregion
 }
Пример #6
0
        private static ArrowBuffer BuildArrowBuffer(FlatBuffers.ByteBuffer bodyData, Flatbuf.Buffer buffer)
        {
            if (buffer.Length <= 0)
            {
                return(null);
            }

            var segment = bodyData.ToArraySegment((int)buffer.Offset, (int)buffer.Length);

            return(ArrowBuffer.FromMemory(segment));
        }
Пример #7
0
 public EntityValue(string _name, AUT_WH.MajorDomoProtocol.EntityValueType _type, byte _index, ushort _size)
 {
     Name        = _name;
     Type        = _type;
     Index       = _index;
     m_data      = new byte[_size];
     m_buffer    = new FlatBuffers.ByteBuffer(m_data);
     m_modified  = false;
     m_updated   = false;
     m_fixedSize = (_size > 0);             // size > 0 indicates a fixed size buffer, size 0 as length indicates a variable length
 }
        /// <summary>
        /// Returns latest frame's hands.
        /// </summary>
        /// <param name="buffer">Byte buffer to use for deserialization.</param>
        /// <param name="frameHands">FrameHands datastructure to populate.</param>
        /// <returns></returns>
        public static bool GetFrameHandsFlatbufferObject(ref byte[] buffer, out FrameHands frameHands)
        {
            if (meta_get_frame_hands(buffer) == 0)
            {
                frameHands = new FrameHands();
                return(false);
            }

            var byteBuffer = new FlatBuffers.ByteBuffer(buffer);

            frameHands = FrameHands.GetRootAsFrameHands(byteBuffer);
            return(true);
        }
Пример #9
0
        private static ArrowBuffer BuildArrowBuffer(FlatBuffers.ByteBuffer bodyData, Flatbuf.Buffer buffer)
        {
            if (buffer.Length <= 0)
            {
                return(ArrowBuffer.Empty);
            }

            var segment = bodyData.ToArraySegment((int)buffer.Offset, (int)buffer.Length);

            return(new ArrowBuffer.Builder <byte>(segment.Count)
                   .Append(segment)
                   .Build());
        }
Пример #10
0
        public static bool GetPose(string source, string target, ref byte[] buffer, out PoseType poseType)
        {
            if (MetaCoreInterop.meta_get_pose(source, target, buffer))
            {
                poseType = new PoseType();

                return(false);
            }

            var byteBuffer = new FlatBuffers.ByteBuffer(buffer);

            poseType = PoseType.GetRootAsPoseType(byteBuffer);
            return(true);
        }
Пример #11
0
        protected static T ReadMessage <T>(FlatBuffers.ByteBuffer bb) where T : struct, FlatBuffers.IFlatbufferObject
        {
            var returnType = typeof(T);
            var msg        = Flatbuf.Message.GetRootAsMessage(bb);

            if (MatchEnum(msg.HeaderType, returnType))
            {
                return(msg.Header <T>().Value);
            }
            else
            {
                throw new Exception($"Requested type '{returnType.Name}' " +
                                    $"did not match type found at offset => '{msg.HeaderType}'");
            }
        }
Пример #12
0
        static StackObject *get_Position_0(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 1);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            FlatBuffers.ByteBuffer instance_of_this_method = (FlatBuffers.ByteBuffer) typeof(FlatBuffers.ByteBuffer).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            var result_of_this_method = instance_of_this_method.Position;

            __ret->ObjectType = ObjectTypes.Integer;
            __ret->Value      = result_of_this_method;
            return(__ret + 1);
        }
        protected async ValueTask <RecordBatch> ReadRecordBatchAsync(CancellationToken cancellationToken = default)
        {
            await ReadSchemaAsync().ConfigureAwait(false);

            int messageLength = 0;
            await ArrayPool <byte> .Shared.RentReturnAsync(4, async (lengthBuffer) =>
            {
                // Get Length of record batch for message header.
                int bytesRead = await BaseStream.ReadFullBufferAsync(lengthBuffer, cancellationToken)
                                .ConfigureAwait(false);

                if (bytesRead == 4)
                {
                    messageLength = BitUtility.ReadInt32(lengthBuffer);
                }
            }).ConfigureAwait(false);

            if (messageLength == 0)
            {
                // reached end
                return(null);
            }

            RecordBatch result = null;
            await ArrayPool <byte> .Shared.RentReturnAsync(messageLength, async (messageBuff) =>
            {
                int bytesRead = await BaseStream.ReadFullBufferAsync(messageBuff, cancellationToken)
                                .ConfigureAwait(false);
                EnsureFullRead(messageBuff, bytesRead);

                Flatbuf.Message message = Flatbuf.Message.GetRootAsMessage(CreateByteBuffer(messageBuff));

                int bodyLength = checked ((int)message.BodyLength);

                IMemoryOwner <byte> bodyBuffOwner = _allocator.Allocate(bodyLength);
                Memory <byte> bodyBuff            = bodyBuffOwner?.Memory.Slice(0, bodyLength) ?? Memory <byte> .Empty;
                bytesRead = await BaseStream.ReadFullBufferAsync(bodyBuff, cancellationToken)
                            .ConfigureAwait(false);
                EnsureFullRead(bodyBuff, bytesRead);

                FlatBuffers.ByteBuffer bodybb = CreateByteBuffer(bodyBuff);
                result = CreateArrowObjectFromMessage(message, bodybb, bodyBuffOwner);
            }).ConfigureAwait(false);

            return(result);
        }
Пример #14
0
        protected async ValueTask <RecordBatch> ReadRecordBatchAsync(CancellationToken cancellationToken = default)
        {
            await ReadSchemaAsync().ConfigureAwait(false);

            int messageLength = 0;
            await Buffers.RentReturnAsync(4, async (lengthBuffer) =>
            {
                // Get Length of record batch for message header.
                int bytesRead = await BaseStream.ReadFullBufferAsync(lengthBuffer, cancellationToken)
                                .ConfigureAwait(false);

                if (bytesRead == 4)
                {
                    messageLength = BitUtility.ReadInt32(lengthBuffer);
                }
            }).ConfigureAwait(false);

            if (messageLength == 0)
            {
                // reached end
                return(null);
            }

            RecordBatch result = null;
            await Buffers.RentReturnAsync(messageLength, async (messageBuff) =>
            {
                int bytesRead = await BaseStream.ReadFullBufferAsync(messageBuff, cancellationToken)
                                .ConfigureAwait(false);
                EnsureFullRead(messageBuff, bytesRead);

                Flatbuf.Message message = Flatbuf.Message.GetRootAsMessage(CreateByteBuffer(messageBuff));

                await Buffers.RentReturnAsync((int)message.BodyLength, async(bodyBuff) =>
                {
                    int bodyBytesRead = await BaseStream.ReadFullBufferAsync(bodyBuff, cancellationToken)
                                        .ConfigureAwait(false);
                    EnsureFullRead(bodyBuff, bodyBytesRead);

                    FlatBuffers.ByteBuffer bodybb = CreateByteBuffer(bodyBuff);
                    result = CreateArrowObjectFromMessage(message, bodybb);
                }).ConfigureAwait(false);
            }).ConfigureAwait(false);

            return(result);
        }
Пример #15
0
        public void Excute()
        {
            int      bufferSize   = 0;
            Protocol protocolType = Protocol.NONE;

            while (_recvBuffer.Size() > Consts.PACKET_HEADER_SIZE)
            {
                Debug.LogWarning("--- _recvBuffer.Size : " + _recvBuffer.Size());

                lock (_recvBuffer)
                {
                    _recvBuffer.Read(_rawAnalysisBuffer, Consts.PACKET_HEADER_SIZE);
                }

                FlatBuffers.ByteBuffer analysisBuffer = new FlatBuffers.ByteBuffer(_rawAnalysisBuffer);

                //패킷 헤더 읽기
                bufferSize   = analysisBuffer.GetUshort(0);
                protocolType = (Protocol)analysisBuffer.GetUshort(sizeof(short));

                Debug.LogWarning("--- recv packet : " + protocolType + "|" + bufferSize);

                //패킷 버퍼가 모두 수신되지 않아 파싱 중지
                if (bufferSize > _recvBuffer.Size())
                {
                    Debug.LogWarning("--- wait read full body : " + _recvBuffer.Size() + "/" + bufferSize);

                    break;
                }

                lock (_recvBuffer)
                {
                    _recvBuffer.Pop(_rawAnalysisBuffer, bufferSize);
                }

                if (_protocolDelegates.ContainsKey(protocolType))
                {
                    _protocolDelegates[protocolType](GetFlatBufferObject(protocolType, _rawAnalysisBuffer, Consts.PACKET_HEADER_SIZE));
                }
                else
                {
                    Debug.LogWarning("--- not register protocol : " + protocolType);
                }
            }
        }
Пример #16
0
        static StackObject *Ctor_0(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 2);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            System.Int32 @pos = ptr_of_this_method->Value;

            ptr_of_this_method = ILIntepreter.Minus(__esp, 2);
            System.Byte[] @buffer = (System.Byte[]) typeof(System.Byte[]).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);


            var result_of_this_method = new FlatBuffers.ByteBuffer(@buffer, @pos);

            return(ILIntepreter.PushObject(__ret, __mStack, result_of_this_method));
        }
Пример #17
0
        protected RecordBatch ReadRecordBatch()
        {
            ReadSchema();

            int messageLength = 0;

            Buffers.RentReturn(4, lengthBuffer =>
            {
                int bytesRead = BaseStream.ReadFullBuffer(lengthBuffer);

                if (bytesRead == 4)
                {
                    messageLength = BitUtility.ReadInt32(lengthBuffer);
                }
            });

            if (messageLength == 0)
            {
                // reached end
                return(null);
            }

            RecordBatch result = null;

            Buffers.RentReturn(messageLength, messageBuff =>
            {
                int bytesRead = BaseStream.ReadFullBuffer(messageBuff);
                EnsureFullRead(messageBuff, bytesRead);

                Flatbuf.Message message = Flatbuf.Message.GetRootAsMessage(CreateByteBuffer(messageBuff));

                Buffers.RentReturn((int)message.BodyLength, bodyBuff =>
                {
                    int bodyBytesRead = BaseStream.ReadFullBuffer(bodyBuff);
                    EnsureFullRead(bodyBuff, bodyBytesRead);

                    FlatBuffers.ByteBuffer bodybb = CreateByteBuffer(bodyBuff);
                    result = CreateArrowObjectFromMessage(message, bodybb);
                });
            });

            return(result);
        }
Пример #18
0
        static StackObject *GetFloat_3(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 2);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            System.Int32 @offset = ptr_of_this_method->Value;

            ptr_of_this_method = ILIntepreter.Minus(__esp, 2);
            FlatBuffers.ByteBuffer instance_of_this_method = (FlatBuffers.ByteBuffer) typeof(FlatBuffers.ByteBuffer).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            var result_of_this_method = instance_of_this_method.GetFloat(@offset);

            __ret->ObjectType       = ObjectTypes.Float;
            *(float *)&__ret->Value = result_of_this_method;
            return(__ret + 1);
        }
        protected virtual void ReadSchema()
        {
            if (HasReadSchema)
            {
                return;
            }

            // Figure out length of schema
            int schemaMessageLength = ReadMessageLength(throwOnFullRead: true);

            ArrayPool <byte> .Shared.RentReturn(schemaMessageLength, buff =>
            {
                int bytesRead = BaseStream.ReadFullBuffer(buff);
                EnsureFullRead(buff, bytesRead);

                FlatBuffers.ByteBuffer schemabb = CreateByteBuffer(buff);
                Schema = MessageSerializer.GetSchema(ReadMessage <Flatbuf.Schema>(schemabb), ref _dictionaryMemo);
            });
        }
        protected virtual async ValueTask ReadSchemaAsync()
        {
            if (HasReadSchema)
            {
                return;
            }

            // Figure out length of schema
            int schemaMessageLength = await ReadMessageLengthAsync(throwOnFullRead : true)
                                      .ConfigureAwait(false);

            await ArrayPool <byte> .Shared.RentReturnAsync(schemaMessageLength, async (buff) =>
            {
                // Read in schema
                int bytesRead = await BaseStream.ReadFullBufferAsync(buff).ConfigureAwait(false);
                EnsureFullRead(buff, bytesRead);

                FlatBuffers.ByteBuffer schemabb = CreateByteBuffer(buff);
                Schema = MessageSerializer.GetSchema(ReadMessage <Flatbuf.Schema>(schemabb), ref _dictionaryMemo);
            }).ConfigureAwait(false);
        }
        protected async ValueTask <RecordBatch> ReadRecordBatchAsync(CancellationToken cancellationToken = default)
        {
            await ReadSchemaAsync().ConfigureAwait(false);

            RecordBatch result = null;

            while (result == null)
            {
                int messageLength = await ReadMessageLengthAsync(throwOnFullRead : false, cancellationToken)
                                    .ConfigureAwait(false);

                if (messageLength == 0)
                {
                    // reached end
                    return(null);
                }

                await ArrayPool <byte> .Shared.RentReturnAsync(messageLength, async (messageBuff) =>
                {
                    int bytesRead = await BaseStream.ReadFullBufferAsync(messageBuff, cancellationToken)
                                    .ConfigureAwait(false);
                    EnsureFullRead(messageBuff, bytesRead);

                    Flatbuf.Message message = Flatbuf.Message.GetRootAsMessage(CreateByteBuffer(messageBuff));

                    int bodyLength = checked ((int)message.BodyLength);

                    IMemoryOwner <byte> bodyBuffOwner = _allocator.Allocate(bodyLength);
                    Memory <byte> bodyBuff            = bodyBuffOwner.Memory.Slice(0, bodyLength);
                    bytesRead = await BaseStream.ReadFullBufferAsync(bodyBuff, cancellationToken)
                                .ConfigureAwait(false);
                    EnsureFullRead(bodyBuff, bytesRead);

                    FlatBuffers.ByteBuffer bodybb = CreateByteBuffer(bodyBuff);
                    result = CreateArrowObjectFromMessage(message, bodybb, bodyBuffOwner);
                }).ConfigureAwait(false);
            }

            return(result);
        }
Пример #22
0
        protected virtual async Task <Schema> ReadSchemaAsync()
        {
            if (HasReadSchema)
            {
                return(Schema);
            }

            byte[] buff = null;

            try
            {
                // Figure out length of schema

                buff = Buffers.Rent(4);
                await BaseStream.ReadAsync(buff, 0, 4);

                var schemaMessageLength = BitConverter.ToInt32(buff, 0);
                Buffers.Return(buff);

                // Allocate byte array for schema flat buffer

                buff = Buffers.Rent(schemaMessageLength);
                var schemabb = new FlatBuffers.ByteBuffer(buff);

                // Read in schema

                await BaseStream.ReadAsync(buff, 0, schemaMessageLength);

                Schema = MessageSerializer.GetSchema(ReadMessage <Flatbuf.Schema>(schemabb));

                return(Schema);
            }
            finally
            {
                if (buff != null)
                {
                    Buffers.Return(buff);
                }
            }
        }
Пример #23
0
        public void ReadEntityValue(AUT_WH.MajorDomoProtocol.EntityValueInformation _information)
        {
            int dataSize = _information.ValueLength;

            // is this a variable size value?
            if ((dataSize != m_data.Length) && !m_fixedSize)
            {
                // yes: adapt buffer
                m_data   = new byte[dataSize];
                m_buffer = new FlatBuffers.ByteBuffer(m_data);
            }
            else
            {
                // no: limit to data size
                dataSize = Math.Min(dataSize, m_data.Length);
            }

            for (int i = 0; i < dataSize; i++)
            {
                m_data[i] = (byte)_information.Value(i);
            }

            m_updated = true;
        }
Пример #24
0
        public static void OnFlatBuffersUpdated(FlatBuffers.ByteBuffer buffer)
        {
            LogWithTime("OnFlatBuffersUpdated=====>");
            var config    = GM.DataCache.Config.GetRootAsConfig(buffer);
            int configLen = config.ArrayLength;

            LogWithTime($"OnFlatBuffersUpdated=====>configLen: {configLen}");
            for (int i = 0; i < configLen; ++i)
            {
                var    entity        = config.GetArray(i);
                string name          = entity.Name;
                string version       = entity.Version;
                var    bufferSegment = entity.GetBufferBytes();
                if (bufferSegment == null)
                {
                    EB.Debug.LogWarning("OnFlatBuffersUpdated: buffer is null");
                    continue;
                }

                EB.Debug.Log("{0} offset = {1} count = {2}, array = {3}", name, bufferSegment.Value.Offset, bufferSegment.Value.Count, bufferSegment.Value.Array.Length);
                SparxHub.Instance.DataCacheManager.ProcessCache(name, version, bufferSegment.Value);
            }
            LogWithTime("<=====OnFlatBuffersUpdated");
        }
Пример #25
0
        protected static IEnumerable <IArrowArray> BuildArrays(Schema schema,
                                                               FlatBuffers.ByteBuffer messageBuffer,
                                                               Flatbuf.RecordBatch recordBatchMessage)
        {
            var arrays      = new List <ArrayData>();
            var bufferIndex = 0;

            for (var n = 0; n < recordBatchMessage.NodesLength; n++)
            {
                var field     = schema.GetFieldByIndex(n);
                var fieldNode = recordBatchMessage.Nodes(n).GetValueOrDefault();

                if (field.DataType.IsFixedPrimitive())
                {
                    arrays.Add(LoadPrimitiveField(field, fieldNode, recordBatchMessage, messageBuffer, ref bufferIndex));
                }
                else
                {
                    arrays.Add(LoadVariableField(field, fieldNode, recordBatchMessage, messageBuffer, ref bufferIndex));
                }
            }

            return(arrays.Select(ArrowArrayFactory.BuildArray));
        }
Пример #26
0
        protected async Task <RecordBatch> ReadRecordBatchAsync(CancellationToken cancellationToken = default)
        {
            await ReadSchemaAsync();

            var bytesRead = 0;

            byte[] lengthBuffer = null;
            byte[] messageBuff  = null;
            byte[] bodyBuff     = null;

            try
            {
                // Get Length of record batch for message header.

                lengthBuffer = Buffers.Rent(4);
                bytesRead   += await BaseStream.ReadAsync(lengthBuffer, 0, 4, cancellationToken);

                var messageLength = BitConverter.ToInt32(lengthBuffer, 0);

                messageBuff = Buffers.Rent(messageLength);
                bytesRead  += await BaseStream.ReadAsync(messageBuff, 0, messageLength, cancellationToken);

                var message = Flatbuf.Message.GetRootAsMessage(new FlatBuffers.ByteBuffer(messageBuff));

                bodyBuff = Buffers.Rent((int)message.BodyLength);
                var bodybb = new FlatBuffers.ByteBuffer(bodyBuff);
                bytesRead += await BaseStream.ReadAsync(bodyBuff, 0, (int)message.BodyLength, cancellationToken);

                switch (message.HeaderType)
                {
                case Flatbuf.MessageHeader.Schema:
                    // TODO: Read schema and verify equality?
                    break;

                case Flatbuf.MessageHeader.DictionaryBatch:
                    // TODO: not supported currently
                    Debug.WriteLine("Dictionaries are not yet supported.");
                    break;

                case Flatbuf.MessageHeader.RecordBatch:
                    var rb     = message.Header <Flatbuf.RecordBatch>().Value;
                    var arrays = BuildArrays(Schema, bodybb, rb);
                    return(new RecordBatch(Schema, arrays, (int)rb.Length));

                default:
                    // NOTE: Skip unsupported message type
                    Debug.WriteLine($"Skipping unsupported message type '{message.HeaderType}'");
                    break;
                }
            }
            finally
            {
                if (lengthBuffer != null)
                {
                    Buffers.Return(lengthBuffer);
                }

                if (messageBuff != null)
                {
                    Buffers.Return(messageBuff);
                }

                if (bodyBuff != null)
                {
                    Buffers.Return(bodyBuff);
                }
            }

            return(null);
        }
Пример #27
0
        protected async Task <RecordBatch> ReadRecordBatchAsync(CancellationToken cancellationToken = default)
        {
            await ReadSchemaAsync().ConfigureAwait(false);

            var bytesRead = 0;

            byte[] lengthBuffer = null;
            byte[] messageBuff  = null;
            byte[] bodyBuff     = null;

            try
            {
                // Get Length of record batch for message header.

                lengthBuffer = Buffers.Rent(4);
                bytesRead   += await BaseStream.ReadAsync(lengthBuffer, 0, 4, cancellationToken)
                               .ConfigureAwait(false);

                if (bytesRead != 4)
                {
                    //reached the end
                    return(null);
                }

                var messageLength = BitConverter.ToInt32(lengthBuffer, 0);

                if (messageLength == 0)
                {
                    //reached the end
                    return(null);
                }

                messageBuff = Buffers.Rent(messageLength);
                bytesRead  += await BaseStream.ReadAsync(messageBuff, 0, messageLength, cancellationToken)
                              .ConfigureAwait(false);

                var message = Flatbuf.Message.GetRootAsMessage(new FlatBuffers.ByteBuffer(messageBuff));

                bodyBuff = Buffers.Rent((int)message.BodyLength);
                var bodybb = new FlatBuffers.ByteBuffer(bodyBuff);
                bytesRead += await BaseStream.ReadAsync(bodyBuff, 0, (int)message.BodyLength, cancellationToken)
                             .ConfigureAwait(false);

                return(CreateArrowObjectFromMessage(message, bodybb));
            }
            finally
            {
                if (lengthBuffer != null)
                {
                    Buffers.Return(lengthBuffer);
                }

                if (messageBuff != null)
                {
                    Buffers.Return(messageBuff);
                }

                if (bodyBuff != null)
                {
                    Buffers.Return(bodyBuff);
                }
            }
        }
        public static Dictionary<string, object> LoadCreatureFlatDataFromBytes(byte[] flat_bytes)
        {
            FlatBuffers.ByteBuffer flat_bytes_buffer = new FlatBuffers.ByteBuffer (flat_bytes);
            Dictionary<string, object> ret_dict = new Dictionary<string, object>();

            var rootObj = CreatureFlatData.rootData.GetRootAsrootData (flat_bytes_buffer);
            var meshObj = rootObj.DataMesh;
            var skeletonObj = rootObj.DataSkeleton;
            var animationObject = rootObj.DataAnimation;
            var uvSwapItemsObject = rootObj.DataUvSwapItem;
            var anchorPointsObject = rootObj.DataAnchorPoints;

            // ------- Process Mesh --------------------------
            Dictionary<string, object> mesh_dict = new Dictionary<string, object> ();

            // Mesh Points
            Object[] write_points = new Object[meshObj.PointsLength];
            for (int i = 0; i < write_points.Length; i++) {
                write_points[i] = meshObj.GetPoints(i);
            }
            mesh_dict ["points"] = write_points;

            // Mesh Uvs
            Object[] write_uvs = new Object[meshObj.UvsLength];
            for (int i = 0; i < write_uvs.Length; i++) {
                write_uvs[i] = meshObj.GetUvs(i);
            }
            mesh_dict ["uvs"] = write_uvs;

            // Mesh Indices
            Object[] write_indices = new Object[meshObj.IndicesLength];
            for (int i = 0; i < write_indices.Length; i++) {
                write_indices[i] = meshObj.GetIndices(i);
            }
            mesh_dict ["indices"] = write_indices;

            // Mesh Regions
            Dictionary<string, object> mesh_region_list_dict = new Dictionary<string, object> ();
            for (int i = 0; i < meshObj.RegionsLength; i++) {
                var meshRegionObj = meshObj.GetRegions(i);
                Dictionary<string, object> mesh_region_dict = new Dictionary<string, object>();

                mesh_region_dict["start_pt_index"] = meshRegionObj.StartPtIndex;
                mesh_region_dict["end_pt_index"] = meshRegionObj.EndPtIndex;
                mesh_region_dict["start_index"] = meshRegionObj.StartIndex;
                mesh_region_dict["end_index"] = meshRegionObj.EndIndex;
                mesh_region_dict["id"] = meshRegionObj.Id;

                Dictionary<string, object> write_region_weights = new Dictionary<string, object>();
                for(int j = 0; j < meshRegionObj.WeightsLength; j++) {
                    var curBoneWeight = meshRegionObj.GetWeights(j);

                    Object [] write_bone_weights = new Object[curBoneWeight.WeightsLength];
                    for(int m = 0; m < write_bone_weights.Length; m++)
                    {
                        write_bone_weights[m] = curBoneWeight.GetWeights(m);
                    }

                    write_region_weights[curBoneWeight.Name] = write_bone_weights;
                }

                mesh_region_dict["weights"] = write_region_weights;

                mesh_region_list_dict[meshRegionObj.Name] = mesh_region_dict;
            }
            mesh_dict ["regions"] = mesh_region_list_dict;

            ret_dict ["mesh"] = mesh_dict;

            // ------- Process Skeleton ----------------------
            Dictionary<string, object> skeleton_dict = new Dictionary<string, object> ();

            for (int i = 0; i < skeletonObj.BonesLength; i++) {
                var skeletonBoneObj = skeletonObj.GetBones(i);
                Dictionary<string, object> skeleton_bone_dict = new Dictionary<string, object>();

                skeleton_bone_dict["id"] = skeletonBoneObj.Id;

                Object [] write_skeleton_bone_restParentMat = new Object[skeletonBoneObj.RestParentMatLength];
                for(int j = 0; j < write_skeleton_bone_restParentMat.Length; j++) {
                    write_skeleton_bone_restParentMat[j] = skeletonBoneObj.GetRestParentMat(j);
                }
                skeleton_bone_dict["restParentMat"] = write_skeleton_bone_restParentMat;

                Object [] write_skeleton_bone_localRestStartPt = new Object[skeletonBoneObj.LocalRestStartPtLength];
                for(int j = 0; j < write_skeleton_bone_localRestStartPt.Length; j++) {
                    write_skeleton_bone_localRestStartPt[j] = skeletonBoneObj.GetLocalRestStartPt(j);
                }
                skeleton_bone_dict["localRestStartPt"] = write_skeleton_bone_localRestStartPt;

                Object [] write_skeleton_bone_localRestEndPt = new Object[skeletonBoneObj.LocalRestEndPtLength];
                for(int j = 0; j < write_skeleton_bone_localRestEndPt.Length; j++) {
                    write_skeleton_bone_localRestEndPt[j] = skeletonBoneObj.GetLocalRestEndPt(j);
                }
                skeleton_bone_dict["localRestEndPt"] = write_skeleton_bone_localRestEndPt;

                Object [] write_skeleton_bone_children = new Object[skeletonBoneObj.ChildrenLength];
                for(int j = 0; j < write_skeleton_bone_children.Length; j++) {
                    write_skeleton_bone_children[j] = skeletonBoneObj.GetChildren(j);
                }
                skeleton_bone_dict["children"] = write_skeleton_bone_children;

                skeleton_dict[skeletonBoneObj.Name] = skeleton_bone_dict;
            }

            ret_dict ["skeleton"] = skeleton_dict;

            // ------- Process Animations --------------------
            Dictionary<string, object> animation_dict = new Dictionary<string, object> ();

            for (int i = 0; i < animationObject.ClipsLength; i++) {
                var animationClipObj = animationObject.GetClips(i);
                var animationBonesObj = animationClipObj.Bones;
                var animationMeshObj = animationClipObj.Meshes;
                var animationUvSwapObj = animationClipObj.UvSwaps;
                var animationMeshOpacitiesObj = animationClipObj.MeshOpacities;

                Dictionary<string, object> animationClipDict = new Dictionary<string, object>();

                // Animation Bones
                Dictionary<string, object> animationBonesTimeSamplesDict = new Dictionary<string, object>();
                for(int j = 0; j < animationBonesObj.TimeSamplesLength; j++) {
                    var animationBonesTimeSample = animationBonesObj.GetTimeSamples(j);
                    String curTime = animationBonesTimeSample.Time.ToString();

                    Dictionary<string, object> animationBonesDict = new Dictionary<string, object>();
                    for(int k = 0; k < animationBonesTimeSample.BonesLength; k++) {
                        Dictionary<string, object> animationSingleBoneDict = new Dictionary<string, object> ();
                        var animationSingleBone = animationBonesTimeSample.GetBones(k);

                        Object [] write_animation_single_bone_start_pt = new Object[animationSingleBone.StartPtLength];
                        for(int m = 0; m < write_animation_single_bone_start_pt.Length; m++) {
                            write_animation_single_bone_start_pt[m] = animationSingleBone.GetStartPt(m);
                        }
                        animationSingleBoneDict["start_pt"] = write_animation_single_bone_start_pt;

                        Object [] write_animation_single_bone_end_pt = new Object[animationSingleBone.EndPtLength];
                        for(int m = 0; m < write_animation_single_bone_end_pt.Length; m++) {
                            write_animation_single_bone_end_pt[m] = animationSingleBone.GetEndPt(m);
                        }
                        animationSingleBoneDict["end_pt"] = write_animation_single_bone_end_pt;

                        animationBonesDict[animationSingleBone.Name] = animationSingleBoneDict;
                    }

                    animationBonesTimeSamplesDict[curTime] = animationBonesDict;
                }

                animationClipDict["bones"] = animationBonesTimeSamplesDict;

                // Animation Meshes
                Dictionary<string, object> animationMeshTimeSamplesDict = new Dictionary<string, object>();
                for(int j = 0; j < animationMeshObj.TimeSamplesLength; j++) {
                    var animationMeshTimeSample = animationMeshObj.GetTimeSamples(j);
                    String curTime = animationMeshTimeSample.Time.ToString();

                    Dictionary<string, object> animationMeshesDict = new Dictionary<string, object>();
                    for(int k = 0; k < animationMeshTimeSample.MeshesLength; k++) {
                        Dictionary<string, object> animationSingleMeshDict = new Dictionary<string, object>();
                        var animationSingleMesh = animationMeshTimeSample.GetMeshes(k);

                        animationSingleMeshDict["use_dq"] = animationSingleMesh.UseDq;
                        animationSingleMeshDict["use_local_displacements"] = animationSingleMesh.UseLocalDisplacements;
                        animationSingleMeshDict["use_post_displacements"] = animationSingleMesh.UsePostDisplacements;

                        if(animationSingleMesh.UseLocalDisplacements) {
                            Object [] write_animation_single_mesh_localDisplacements = new Object[animationSingleMesh.LocalDisplacementsLength];
                            for(int m = 0; m < write_animation_single_mesh_localDisplacements.Length; m++) {
                                write_animation_single_mesh_localDisplacements[m] = animationSingleMesh.GetLocalDisplacements(m);
                            }
                            animationSingleMeshDict["local_displacements"] = write_animation_single_mesh_localDisplacements;
                        }

                        if(animationSingleMesh.UsePostDisplacements) {
                            Object [] write_animation_single_mesh_postDisplacements = new Object[animationSingleMesh.PostDisplacementsLength];
                            for(int m = 0; m < write_animation_single_mesh_postDisplacements.Length; m++) {
                                write_animation_single_mesh_postDisplacements[m] = animationSingleMesh.GetPostDisplacements(m);
                            }
                            animationSingleMeshDict["post_displacements"] = write_animation_single_mesh_postDisplacements;
                        }

                        animationMeshesDict[animationSingleMesh.Name] = animationSingleMeshDict;
                    }

                    animationMeshTimeSamplesDict[curTime] = animationMeshesDict;
                }

                animationClipDict["meshes"] = animationMeshTimeSamplesDict;

                // Animation UV Swaps
                Dictionary<string, object> animationUvSwapTimeSamplesDict = new Dictionary<string, object>();
                for(int j = 0; j < animationUvSwapObj.TimeSamplesLength; j++) {
                    var animationUvSwapTimeSample = animationUvSwapObj.GetTimeSamples(j);
                    String curTime = animationUvSwapTimeSample.Time.ToString();

                    Dictionary<string, object> animationUVSwapDict = new Dictionary<string, object>();
                    for(int k = 0; k < animationUvSwapTimeSample.UvSwapsLength; k++) {
                        Dictionary<string, object> animationSingleUvSwapDict = new Dictionary<string, object>();
                        var animationSingleUvSwap = animationUvSwapTimeSample.GetUvSwaps(k);

                        animationSingleUvSwapDict["enabled"] = animationSingleUvSwap.Enabled;

                        Object [] write_animation_single_uvswap_localOffset = new Object[animationSingleUvSwap.LocalOffsetLength];
                        for(int m = 0; m < write_animation_single_uvswap_localOffset.Length; m++) {
                            write_animation_single_uvswap_localOffset[m] = animationSingleUvSwap.GetLocalOffset(m);
                        }
                        animationSingleUvSwapDict["local_offset"] = write_animation_single_uvswap_localOffset;

                        Object [] write_animation_single_uvswap_globalOffset = new Object[animationSingleUvSwap.GlobalOffsetLength];
                        for(int m = 0; m < write_animation_single_uvswap_globalOffset.Length; m++) {
                            write_animation_single_uvswap_globalOffset[m] = animationSingleUvSwap.GetGlobalOffset(m);
                        }
                        animationSingleUvSwapDict["global_offset"] = write_animation_single_uvswap_globalOffset;

                        Object [] write_animation_single_uvswap_scale = new Object[animationSingleUvSwap.ScaleLength];
                        for(int m = 0; m < write_animation_single_uvswap_scale.Length; m++) {
                            write_animation_single_uvswap_scale[m] = animationSingleUvSwap.GetScale(m);
                        }
                        animationSingleUvSwapDict["scale"] = write_animation_single_uvswap_scale;

                        animationUVSwapDict[animationSingleUvSwap.Name] = animationSingleUvSwapDict;
                    }

                    animationUvSwapTimeSamplesDict[curTime] = animationUVSwapDict;
                }

                animationClipDict["uv_swaps"] = animationUvSwapTimeSamplesDict;

                // Animation Mesh Opacities
                Dictionary<string, object> animationMeshOpacitiesTimeSamplesDict = new Dictionary<string, object>();
                for(int j = 0; j < animationMeshOpacitiesObj.TimeSamplesLength; j++) {
                    var animationMeshOpacitiesTimeSample = animationMeshOpacitiesObj.GetTimeSamples(j);
                    String curTime = animationMeshOpacitiesTimeSample.Time.ToString();

                    Dictionary<string, object> animationMeshOpacitiesDict = new Dictionary<string, object>();
                    for(int k = 0; k < animationMeshOpacitiesTimeSample.MeshOpacitiesLength; k++) {
                        Dictionary<string, object> animationSingleMeshOpacitiesDict = new Dictionary<string, object>();
                        var animationSingleMeshOpacities = animationMeshOpacitiesTimeSample.GetMeshOpacities(k);

                        animationSingleMeshOpacitiesDict["opacity"] = animationSingleMeshOpacities.Opacity;

                        animationMeshOpacitiesDict[animationSingleMeshOpacities.Name] = animationSingleMeshOpacitiesDict;
                    }

                    animationMeshOpacitiesTimeSamplesDict[curTime] = animationMeshOpacitiesDict;
                }

                animationClipDict["mesh_opacities"] = animationMeshOpacitiesTimeSamplesDict;

                animation_dict[animationClipObj.Name] = animationClipDict;
            }

            ret_dict ["animation"] = animation_dict;

            // uv item swaps
            Dictionary<string, object> uvItemSwapsDict = new Dictionary<string, object>();
            for(int j = 0; j < uvSwapItemsObject.MeshesLength; j++) {
                var curSwapMesh = uvSwapItemsObject.GetMeshes(j);
                object[] node_list = new object[curSwapMesh.ItemsLength];
                var mesh_name = curSwapMesh.Name;

                for(int k = 0; k < curSwapMesh.ItemsLength; k++) {
                    var curItem = curSwapMesh.GetItems(k);
                    Dictionary<string, object> packet_dict = new Dictionary<string, object>();

                    Object [] write_localOffset = new Object[curItem.LocalOffsetLength];
                    for(int m = 0; m < write_localOffset.Length; m++) {
                        write_localOffset[m] = curItem.GetLocalOffset(m);
                    }
                    packet_dict["local_offset"] = write_localOffset;

                    Object [] write_globalOffset = new Object[curItem.GlobalOffsetLength];
                    for(int m = 0; m < write_globalOffset.Length; m++) {
                        write_globalOffset[m] = curItem.GetGlobalOffset(m);
                    }
                    packet_dict["global_offset"] = write_globalOffset;

                    Object [] write_scale = new Object[curItem.ScaleLength];
                    for(int m = 0; m < write_scale.Length; m++) {
                        write_scale[m] = curItem.GetScale(m);
                    }
                    packet_dict["scale"] = write_scale;

                    packet_dict["tag"] = curItem.Tag;

                    node_list[k] = packet_dict;
                }

                uvItemSwapsDict[mesh_name] = node_list;
            }

            ret_dict["uv_swap_items"] = uvItemSwapsDict;

            // anchor points
            Dictionary<string, object> anchorPointsBaseDict = new Dictionary<string, object>();

            Object[] anchorPointsList = new Object[anchorPointsObject.AnchorPointsLength];
            for(int j = 0; j < anchorPointsObject.AnchorPointsLength; j++)
            {
                var curItem = anchorPointsObject.GetAnchorPoints(j);

                Dictionary<string, object> anchor_dict = new Dictionary<string, object>();
                Object [] write_cur_point = new Object[curItem.PointLength];
                for(int m = 0; m < write_cur_point.Length; m++) {
                    write_cur_point[m] = curItem.GetPoint(m);
                }

                anchor_dict["point"] = write_cur_point;
                anchor_dict["anim_clip_name"] = curItem.AnimClipName;

                anchorPointsList[j] = anchor_dict;
            }

            anchorPointsBaseDict["AnchorPoints"] = anchorPointsList;
            ret_dict["anchor_points_items"] = anchorPointsBaseDict;

            return ret_dict;
        }
Пример #29
0
        public static Dictionary <string, object> LoadCreatureFlatDataFromBytes(byte[] flat_bytes)
        {
            FlatBuffers.ByteBuffer      flat_bytes_buffer = new FlatBuffers.ByteBuffer(flat_bytes);
            Dictionary <string, object> ret_dict          = new Dictionary <string, object>();


            var rootObj         = CreatureFlatData.rootData.GetRootAsrootData(flat_bytes_buffer);
            var meshObj         = rootObj.DataMesh;
            var skeletonObj     = rootObj.DataSkeleton;
            var animationObject = rootObj.DataAnimation;

            // ------- Process Mesh --------------------------
            Dictionary <string, object> mesh_dict = new Dictionary <string, object> ();

            // Mesh Points
            Object[] write_points = new Object[meshObj.PointsLength];
            for (int i = 0; i < write_points.Length; i++)
            {
                write_points[i] = meshObj.GetPoints(i);
            }
            mesh_dict ["points"] = write_points;

            // Mesh Uvs
            Object[] write_uvs = new Object[meshObj.UvsLength];
            for (int i = 0; i < write_uvs.Length; i++)
            {
                write_uvs[i] = meshObj.GetUvs(i);
            }
            mesh_dict ["uvs"] = write_uvs;

            // Mesh Indices
            Object[] write_indices = new Object[meshObj.IndicesLength];
            for (int i = 0; i < write_indices.Length; i++)
            {
                write_indices[i] = meshObj.GetIndices(i);
            }
            mesh_dict ["indices"] = write_indices;

            // Mesh Regions
            Dictionary <string, object> mesh_region_list_dict = new Dictionary <string, object> ();

            for (int i = 0; i < meshObj.RegionsLength; i++)
            {
                var meshRegionObj = meshObj.GetRegions(i);
                Dictionary <string, object> mesh_region_dict = new Dictionary <string, object>();

                mesh_region_dict["start_pt_index"] = meshRegionObj.StartPtIndex;
                mesh_region_dict["end_pt_index"]   = meshRegionObj.EndPtIndex;
                mesh_region_dict["start_index"]    = meshRegionObj.StartIndex;
                mesh_region_dict["end_index"]      = meshRegionObj.EndIndex;
                mesh_region_dict["id"]             = meshRegionObj.Id;

                Dictionary <string, object> write_region_weights = new Dictionary <string, object>();
                for (int j = 0; j < meshRegionObj.WeightsLength; j++)
                {
                    var curBoneWeight = meshRegionObj.GetWeights(j);

                    Object [] write_bone_weights = new Object[curBoneWeight.WeightsLength];
                    for (int m = 0; m < write_bone_weights.Length; m++)
                    {
                        write_bone_weights[m] = curBoneWeight.GetWeights(m);
                    }

                    write_region_weights[curBoneWeight.Name] = write_bone_weights;
                }

                mesh_region_dict["weights"] = write_region_weights;

                mesh_region_list_dict[meshRegionObj.Name] = mesh_region_dict;
            }
            mesh_dict ["regions"] = mesh_region_list_dict;


            ret_dict ["mesh"] = mesh_dict;

            // ------- Process Skeleton ----------------------
            Dictionary <string, object> skeleton_dict = new Dictionary <string, object> ();

            for (int i = 0; i < skeletonObj.BonesLength; i++)
            {
                var skeletonBoneObj = skeletonObj.GetBones(i);
                Dictionary <string, object> skeleton_bone_dict = new Dictionary <string, object>();

                skeleton_bone_dict["id"] = skeletonBoneObj.Id;

                Object [] write_skeleton_bone_restParentMat = new Object[skeletonBoneObj.RestParentMatLength];
                for (int j = 0; j < write_skeleton_bone_restParentMat.Length; j++)
                {
                    write_skeleton_bone_restParentMat[j] = skeletonBoneObj.GetRestParentMat(j);
                }
                skeleton_bone_dict["restParentMat"] = write_skeleton_bone_restParentMat;

                Object [] write_skeleton_bone_localRestStartPt = new Object[skeletonBoneObj.LocalRestStartPtLength];
                for (int j = 0; j < write_skeleton_bone_localRestStartPt.Length; j++)
                {
                    write_skeleton_bone_localRestStartPt[j] = skeletonBoneObj.GetLocalRestStartPt(j);
                }
                skeleton_bone_dict["localRestStartPt"] = write_skeleton_bone_localRestStartPt;

                Object [] write_skeleton_bone_localRestEndPt = new Object[skeletonBoneObj.LocalRestEndPtLength];
                for (int j = 0; j < write_skeleton_bone_localRestEndPt.Length; j++)
                {
                    write_skeleton_bone_localRestEndPt[j] = skeletonBoneObj.GetLocalRestEndPt(j);
                }
                skeleton_bone_dict["localRestEndPt"] = write_skeleton_bone_localRestEndPt;

                Object [] write_skeleton_bone_children = new Object[skeletonBoneObj.ChildrenLength];
                for (int j = 0; j < write_skeleton_bone_children.Length; j++)
                {
                    write_skeleton_bone_children[j] = skeletonBoneObj.GetChildren(j);
                }
                skeleton_bone_dict["children"] = write_skeleton_bone_children;

                skeleton_dict[skeletonBoneObj.Name] = skeleton_bone_dict;
            }

            ret_dict ["skeleton"] = skeleton_dict;

            // ------- Process Animations --------------------
            Dictionary <string, object> animation_dict = new Dictionary <string, object> ();

            for (int i = 0; i < animationObject.ClipsLength; i++)
            {
                var animationClipObj          = animationObject.GetClips(i);
                var animationBonesObj         = animationClipObj.Bones;
                var animationMeshObj          = animationClipObj.Meshes;
                var animationUvSwapObj        = animationClipObj.UvSwaps;
                var animationMeshOpacitiesObj = animationClipObj.MeshOpacities;

                Dictionary <string, object> animationClipDict = new Dictionary <string, object>();

                // Animation Bones
                Dictionary <string, object> animationBonesTimeSamplesDict = new Dictionary <string, object>();
                for (int j = 0; j < animationBonesObj.TimeSamplesLength; j++)
                {
                    var    animationBonesTimeSample = animationBonesObj.GetTimeSamples(j);
                    String curTime = animationBonesTimeSample.Time.ToString();

                    Dictionary <string, object> animationBonesDict = new Dictionary <string, object>();
                    for (int k = 0; k < animationBonesTimeSample.BonesLength; k++)
                    {
                        Dictionary <string, object> animationSingleBoneDict = new Dictionary <string, object> ();
                        var animationSingleBone = animationBonesTimeSample.GetBones(k);

                        Object [] write_animation_single_bone_start_pt = new Object[animationSingleBone.StartPtLength];
                        for (int m = 0; m < write_animation_single_bone_start_pt.Length; m++)
                        {
                            write_animation_single_bone_start_pt[m] = animationSingleBone.GetStartPt(m);
                        }
                        animationSingleBoneDict["start_pt"] = write_animation_single_bone_start_pt;

                        Object [] write_animation_single_bone_end_pt = new Object[animationSingleBone.EndPtLength];
                        for (int m = 0; m < write_animation_single_bone_end_pt.Length; m++)
                        {
                            write_animation_single_bone_end_pt[m] = animationSingleBone.GetEndPt(m);
                        }
                        animationSingleBoneDict["end_pt"] = write_animation_single_bone_end_pt;

                        animationBonesDict[animationSingleBone.Name] = animationSingleBoneDict;
                    }

                    animationBonesTimeSamplesDict[curTime] = animationBonesDict;
                }

                animationClipDict["bones"] = animationBonesTimeSamplesDict;

                // Animation Meshes
                Dictionary <string, object> animationMeshTimeSamplesDict = new Dictionary <string, object>();
                for (int j = 0; j < animationMeshObj.TimeSamplesLength; j++)
                {
                    var    animationMeshTimeSample = animationMeshObj.GetTimeSamples(j);
                    String curTime = animationMeshTimeSample.Time.ToString();

                    Dictionary <string, object> animationMeshesDict = new Dictionary <string, object>();
                    for (int k = 0; k < animationMeshTimeSample.MeshesLength; k++)
                    {
                        Dictionary <string, object> animationSingleMeshDict = new Dictionary <string, object>();
                        var animationSingleMesh = animationMeshTimeSample.GetMeshes(k);

                        animationSingleMeshDict["use_dq"] = animationSingleMesh.UseDq;
                        animationSingleMeshDict["use_local_displacements"] = animationSingleMesh.UseLocalDisplacements;
                        animationSingleMeshDict["use_post_displacements"]  = animationSingleMesh.UsePostDisplacements;

                        if (animationSingleMesh.UseLocalDisplacements)
                        {
                            Object [] write_animation_single_mesh_localDisplacements = new Object[animationSingleMesh.LocalDisplacementsLength];
                            for (int m = 0; m < write_animation_single_mesh_localDisplacements.Length; m++)
                            {
                                write_animation_single_mesh_localDisplacements[m] = animationSingleMesh.GetLocalDisplacements(m);
                            }
                            animationSingleMeshDict["local_displacements"] = write_animation_single_mesh_localDisplacements;
                        }

                        if (animationSingleMesh.UsePostDisplacements)
                        {
                            Object [] write_animation_single_mesh_postDisplacements = new Object[animationSingleMesh.PostDisplacementsLength];
                            for (int m = 0; m < write_animation_single_mesh_postDisplacements.Length; m++)
                            {
                                write_animation_single_mesh_postDisplacements[m] = animationSingleMesh.GetPostDisplacements(m);
                            }
                            animationSingleMeshDict["post_displacements"] = write_animation_single_mesh_postDisplacements;
                        }

                        animationMeshesDict[animationSingleMesh.Name] = animationSingleMeshDict;
                    }

                    animationMeshTimeSamplesDict[curTime] = animationMeshesDict;
                }

                animationClipDict["meshes"] = animationMeshTimeSamplesDict;

                // Animation UV Swaps
                Dictionary <string, object> animationUvSwapTimeSamplesDict = new Dictionary <string, object>();
                for (int j = 0; j < animationUvSwapObj.TimeSamplesLength; j++)
                {
                    var    animationUvSwapTimeSample = animationUvSwapObj.GetTimeSamples(j);
                    String curTime = animationUvSwapTimeSample.Time.ToString();

                    Dictionary <string, object> animationUVSwapDict = new Dictionary <string, object>();
                    for (int k = 0; k < animationUvSwapTimeSample.UvSwapsLength; k++)
                    {
                        Dictionary <string, object> animationSingleUvSwapDict = new Dictionary <string, object>();
                        var animationSingleUvSwap = animationUvSwapTimeSample.GetUvSwaps(k);

                        animationSingleUvSwapDict["enabled"] = animationSingleUvSwap.Enabled;

                        Object [] write_animation_single_uvswap_localOffset = new Object[animationSingleUvSwap.LocalOffsetLength];
                        for (int m = 0; m < write_animation_single_uvswap_localOffset.Length; m++)
                        {
                            write_animation_single_uvswap_localOffset[m] = animationSingleUvSwap.GetLocalOffset(m);
                        }
                        animationSingleUvSwapDict["local_offset"] = write_animation_single_uvswap_localOffset;

                        Object [] write_animation_single_uvswap_globalOffset = new Object[animationSingleUvSwap.GlobalOffsetLength];
                        for (int m = 0; m < write_animation_single_uvswap_globalOffset.Length; m++)
                        {
                            write_animation_single_uvswap_globalOffset[m] = animationSingleUvSwap.GetGlobalOffset(m);
                        }
                        animationSingleUvSwapDict["global_offset"] = write_animation_single_uvswap_globalOffset;

                        Object [] write_animation_single_uvswap_scale = new Object[animationSingleUvSwap.ScaleLength];
                        for (int m = 0; m < write_animation_single_uvswap_scale.Length; m++)
                        {
                            write_animation_single_uvswap_scale[m] = animationSingleUvSwap.GetScale(m);
                        }
                        animationSingleUvSwapDict["scale"] = write_animation_single_uvswap_scale;

                        animationUVSwapDict[animationSingleUvSwap.Name] = animationSingleUvSwapDict;
                    }

                    animationUvSwapTimeSamplesDict[curTime] = animationUVSwapDict;
                }

                animationClipDict["uv_swaps"] = animationUvSwapTimeSamplesDict;

                // Animation Mesh Opacities
                Dictionary <string, object> animationMeshOpacitiesTimeSamplesDict = new Dictionary <string, object>();
                for (int j = 0; j < animationMeshOpacitiesObj.TimeSamplesLength; j++)
                {
                    var    animationMeshOpacitiesTimeSample = animationMeshOpacitiesObj.GetTimeSamples(j);
                    String curTime = animationMeshOpacitiesTimeSample.Time.ToString();

                    Dictionary <string, object> animationMeshOpacitiesDict = new Dictionary <string, object>();
                    for (int k = 0; k < animationMeshOpacitiesTimeSample.MeshOpacitiesLength; k++)
                    {
                        Dictionary <string, object> animationSingleMeshOpacitiesDict = new Dictionary <string, object>();
                        var animationSingleMeshOpacities = animationMeshOpacitiesTimeSample.GetMeshOpacities(k);

                        animationSingleMeshOpacitiesDict["opacity"] = animationSingleMeshOpacities.Opacity;

                        animationMeshOpacitiesDict[animationSingleMeshOpacities.Name] = animationSingleMeshOpacitiesDict;
                    }

                    animationMeshOpacitiesTimeSamplesDict[curTime] = animationMeshOpacitiesDict;
                }

                animationClipDict["mesh_opacities"] = animationMeshOpacitiesTimeSamplesDict;

                animation_dict[animationClipObj.Name] = animationClipDict;
            }

            ret_dict ["animation"] = animation_dict;

            return(ret_dict);
        }
Пример #30
0
        public static void OnFlatBuffersEntityUpdated(string name, System.ArraySegment <byte> range)
        {
            //EB.Debug.LogError("frameCount : {0} , name : {1}", UnityEngine.Time.frameCount, name);
            //EB.Debug.LogError("OnFlatBuffersEntityUpdated : {0}", name);

            FlatBuffers.ByteBuffer buffer = new FlatBuffers.ByteBuffer(range.Array, range.Offset);
            switch (name)
            {
            case "Combat":
                var combat = GM.DataCache.Combat.GetRootAsCombat(buffer);
                SkillTemplateManager.Instance.InitFromDataCache(combat);
                SkillTemplateManager.Instance.InitSkillLevelUpFromDataCache(combat);
                BuffTemplateManager.Instance.InitTemplateFromCache(combat);
                break;

            case "Economy":
                var economy = GM.DataCache.Economy.GetRootAsEconomy(buffer);
                EconemyTemplateManager.Instance.InitFromDataCache(economy);
                break;

            case "Task":
                var task = GM.DataCache.Task.GetRootAsTask(buffer);
                TaskTemplateManager.Instance.InitFromDataCache(task);
                break;

            case "Resource":
                var resource = GM.DataCache.Resource.GetRootAsResource(buffer);
                BuyResourceTemplateManager.Instance.InitFromDataCache(resource);
                break;

            case "Scene":
                var scene = GM.DataCache.Scene.GetRootAsScene(buffer);
                SceneTemplateManager.Instance.InitFromDataCache(scene);
                break;

            case "Character":
                var character = GM.DataCache.Character.GetRootAsCharacter(buffer);
                CharacterTemplateManager.Instance.InitFromDataCache(character);
                break;

            case "Guide":
                var guide = GM.DataCache.Guide.GetRootAsGuide(buffer);
                var gd    = guide.GetArray(0);
                GuideManager.Instance.InitConfigData(gd);
                GuideTemplateManager.Instance.InitFromDataCache(gd);
                DialogueTemplateManager.Instance.InitDialogueData(gd);
                GuideAudioTemplateManager.Instance.InitGuideAudioData(gd);
                MessageTemplateManager.Instance.InitFromDataCache(gd);
                FuncTemplateManager.Instance.InitFromDataCache(gd);
                PreviewTemplateManager.Instance.InitFromDataCache(gd);
                FuncActivedTemplateManager.Instance.InitFuncActivedData(gd);
                GuideNodeTemplateManager.Instance.InitGuideNode(gd);
                break;

            case "Event":
                var evt = GM.DataCache.Event.GetRootAsEvent(buffer);
                WelfareTemplateManager.Instance.InitTemplateFromCache(evt);
                EventTemplateManager.Instance.InitFromDataCache(evt);
                break;

            case "Vip":
                var vip = GM.DataCache.Vip.GetRootAsVip(buffer);
                VIPTemplateManager.Instance.InitTemplateFromCache(vip);
                break;

            case "Alliance":
                var alliance = GM.DataCache.Alliance.GetRootAsAlliance(buffer);
                AlliancesManager.Instance.Config.OnUpdateFunc(alliance);
                AllianceTemplateManager.Instance.InitFromDataCache(alliance);
                break;

            case "Shop":
                var shop = GM.DataCache.Shop.GetRootAsShop(buffer);
                ShopTemplateManager.Instance.InitFromDataCache(shop);
                break;

            case "NewGameConfig":
                var newGameConfig = GM.DataCache.NewGameConfig.GetRootAsNewGameConfig(buffer);
                NewGameConfigTemplateManager.Instance.InitFromDataCache(newGameConfig);
                break;
            }
        }