Пример #1
0
        /// <summary>
        /// LUA带有嵌入式消息读取
        ///
        /// 测试流程:
        ///  1、C#中生成消息实例,并给消息字段赋值
        ///  2、用C#的写入方式写入流中
        ///  3、用lua的解析方式方式从流中读取数据,生成对应lua消息类型实例
        ///
        /// 消息定义文件:
        ///  1、lua部分:
        ///     文件: protoMsgDef.lua.txt
        ///     定义: idMsg=900000, table="lua_message", nestedTable="lua_nested"
        ///
        ///  2、C#部分
        ///     文件: Analys.proto
        ///     定义: message=lua_message, message=lua_nested
        ///
        /// </summary>
        static void luaProtoMsgWithNestR()
        {
            Msg.lua_message msg = new Msg.lua_message();
            msg.value_repeated.Add(new Msg.lua_nested()
            {
                value_int32  = 1,
                value_bool   = true,
                value_bytes  = System.Text.Encoding.UTF8.GetBytes("Hello"),
                value_string = "Oh",
            });

            msg.value_repeated.Add(new Msg.lua_nested()
            {
                value_int32  = 2,
                value_bool   = true,
                value_bytes  = System.Text.Encoding.UTF8.GetBytes("World"),
                value_string = "Yes",
            });

            using (MemoryStream stream = new MemoryStream())
            {
                //序列化
                ProtoBuf.Serializer.Serialize(stream, msg);

                //反序列化
                luaMessage msgRev = null;
                using (var desializeStream = new MemoryStream(stream.ToArray(), 0, (int)stream.Length))
                {
                    using (luaProtoReader reader = luaProtoReader.createLuaProtoReader(desializeStream))
                    {
                        if (reader != null)
                        {
                            msgRev = reader.readLuaMessage(900000);
                        }
                    }

                    //消息发送测试
                    luaProtobuf.getInstance().receiveMsg(900000, desializeStream);
                }

                //打印结果
                string lsss = msgRev.logStr();
                LogSys.Log(lsss);

                if (msgRev != null)
                {
                    LogSys.Log("_LUA_PROTO_R_WITH_NEST_ success!");
                }
            }
        }
Пример #2
0
        /// <summary>
        /// LUA带有嵌入式消息写入
        ///
        /// 测试流程:
        ///  1、从lua中读取消息数据表(table)
        ///  2、用lua的写入方式写入流中
        ///  3、用原有的解析方式从流中读取数据,生成对应C#消息类型实例
        ///
        /// 消息定义文件:
        ///  1、lua部分:
        ///     文件: protoMsgDef.lua.txt
        ///     定义: idMsg=900000, table="lua_message", nestedTable="lua_nested"
        ///     数据: table="____protoMsg900000"
        ///
        ///  2、C#部分
        ///     文件: Analys.proto
        ///     定义: message=lua_message, message=lua_nested
        ///
        /// </summary>
        static void luaProtoMsgWithNestW()
        {
            var        protoMsg = luaSvrManager.getInstance().luaSvr.luaState.getTable("____protoMsg900000");
            luaMessage msg      = luaProtoHelper.readLuaMessage(900000, protoMsg);

            //打印消息
            string lsss = msg.logStr();

            LogSys.Log(lsss);

            using (MemoryStream stream = new MemoryStream())
            {
                //把lua表的数据写入流中
                var protoWriter = new luaProtoWriter(stream);
                protoWriter.writeLuaMessage(msg);
                protoWriter.close();

                MemoryStream    desializeStream = null;
                Msg.lua_message msgRev          = null;
                try
                {
                    desializeStream = new System.IO.MemoryStream(stream.ToArray(), 0, (int)stream.Length);
                    msgRev          = ProtoBuf.Serializer.Deserialize <Msg.lua_message>(desializeStream);
                }
                finally
                {
                    if (desializeStream != null)
                    {
                        desializeStream.Dispose();
                    }
                    desializeStream = null;
                }

                if (msgRev != null)
                {
                    LogSys.Log("_LUA_PROTO_W_WITH_NEST_ success!");
                }
            }
        }
Пример #3
0
        /// <summary>
        /// C#带有嵌入消息的写入和读取
        ///
        /// 消息定义文件: Analys.proto
        /// 消息类型: lua_message
        /// </summary>
        static void csProtoMsgWithNestRW()
        {
            Msg.lua_message msg = new Msg.lua_message();
            msg.value_repeated.Add(new Msg.lua_nested()
            {
                value_int32  = 1,
                value_bool   = true,
                value_bytes  = System.Text.Encoding.UTF8.GetBytes("Hello"),
                value_string = "Oh",
            });

            msg.value_repeated.Add(new Msg.lua_nested()
            {
                value_int32  = 2,
                value_bool   = true,
                value_bytes  = System.Text.Encoding.UTF8.GetBytes("World"),
                value_string = "Yes",
            });

            using (MemoryStream stream = new MemoryStream())
            {
                //序列化
                ProtoBuf.Serializer.Serialize(stream, msg);

                //反序列化
                Msg.lua_message msgRev = null;
                using (var desializeStream = new MemoryStream(stream.ToArray(), 0, (int)stream.Length))
                {
                    msgRev = ProtoBuf.Serializer.Deserialize <Msg.lua_message>(desializeStream);
                }

                if (msgRev != null)
                {
                    LogSys.Log("_C_SHARP_PROTO_RW_WITH_NEST__ success!");
                }
            }
        }