void processor_SC_NOTI_MOVE_OBJECT(GAME.SC_NOTI_MOVE_OBJECT read)
    {
        var key = read.Key;
        //Debug.Log("key 움직임: " + key);
        var   pos       = new Vector3(read.PosX, read.PosY, read.PosZ);
        var   rot       = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW);
        Int64 timestamp = read.Timestamp;

        //Debug.Log("SC_NOTI_MOVE_OBJECT");
        //Debug.Log("x: " + pos.x + "y: " +  pos.y + "z: " + pos.z);
        //Debug.Log(timestamp);

        var enemyTankInfo = enemies[key];

        if (enemyTankInfo != null)
        {
            enemyTankInfo.snapshots[0].timestamp = enemyTankInfo.snapshots[1].timestamp;
            enemyTankInfo.snapshots[0].pos       = enemyTankInfo.snapshots[1].pos;
            enemyTankInfo.snapshots[0].rot       = enemyTankInfo.snapshots[1].rot;
            enemyTankInfo.snapshots[0].latency   = enemyTankInfo.snapshots[1].latency;

            enemyTankInfo.snapshots[1].timestamp = read.Timestamp;
            enemyTankInfo.snapshots[1].pos       = new Vector3(read.PosX, read.PosY, read.PosZ);
            enemyTankInfo.snapshots[1].rot       = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW);
            enemyTankInfo.snapshots[1].latency   = session_.getServerTimestamp() - read.Timestamp;


            /*
             * enemyTankInfo.prev_last_info.timestamp = enemyTankInfo.last_info.timestamp;
             * enemyTankInfo.prev_last_info.pos       = enemyTankInfo.last_info.pos;
             * enemyTankInfo.prev_last_info.rot       = enemyTankInfo.last_info.rot;
             * enemyTankInfo.prev_last_info.latency   = enemyTankInfo.last_info.latency;
             *
             * enemyTankInfo.last_info.timestamp = read.Timestamp;
             * enemyTankInfo.last_info.pos = new Vector3(read.PosX, read.PosY, read.PosZ);
             * enemyTankInfo.last_info.rot = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW);
             *
             * Int64 Now = session_.getServerTimestamp();
             * enemyTankInfo.last_info.latency = Now - read.Timestamp;
             *
             * if (Now - read.Timestamp <= 0)
             * {
             *  Debug.Log("@@@@@@@@@@@ 말도안됨 @@@@@@@@@@@");
             * }
             *
             * if (enemyTankInfo.prev_last_info.timestamp == enemyTankInfo.last_info.timestamp)
             * {
             *  Debug.Log("@@@@@@@@@@@@@@@@@@@@@@@@");
             *  Debug.Log("before_last_info.timestamp : " + enemyTankInfo.prev_last_info.timestamp);
             *
             * }
             */
        }

        /*
         * enemy_before_last_info = enemy_last_info;
         *
         * enemy_last_info.timestamp = read.Timestamp;
         * enemy_last_info.pos = new Vector3(read.X, read.Y, read.Z);
         * enemy_last_info.rot = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW);
         */
    }
    // 패킷 처리
    public void process_packet()
    {
        while (network_module_.recv_stream_queue.Count > 0)
        {
            var packet_stream = network_module_.recv_stream_queue.Dequeue();

            // 패킷 스트림에서 대가리 2바이트 짤라서 opcode 가져와야함
            byte[] packet_buffer = packet_stream.ToArray();

            Int16 _opcode         = BitConverter.ToInt16(packet_buffer, 0);
            var   protobuf_stream = new MemoryStream();
            var   protobuf_size   = packet_stream.Length - sizeof(Int16);
            protobuf_stream.Write(packet_buffer, sizeof(Int16), (int)protobuf_size);

            byte[] proto_buffer = protobuf_stream.ToArray();


            try
            {
                if ((network.opcode)_opcode == network.opcode.SC_LOG_IN)
                {
                    LOBBY.SC_LOG_IN read = LOBBY.SC_LOG_IN.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_LOG_IN != null)
                    {
                        processor_SC_LOG_IN(read);
                    }
                }
                else if ((network.opcode)_opcode == network.opcode.SC_SET_NICKNAME)
                {
                    LOBBY.SC_SET_NICKNAME read = LOBBY.SC_SET_NICKNAME.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_SET_NICKNAME != null)
                    {
                        processor_SC_SET_NICKNAME(read);
                    }
                }
                // GAME
                else if ((network.opcode)_opcode == network.opcode.SC_ENTER_FIELD)
                {
                    GAME.SC_ENTER_FIELD read = GAME.SC_ENTER_FIELD.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_ENTER_FIELD != null)
                    {
                        processor_SC_ENTER_FIELD(read);
                    }
                }
                else if ((network.opcode)_opcode == network.opcode.SC_NOTI_ENTER_FIELD)
                {
                    GAME.SC_NOTI_ENTER_FIELD read = GAME.SC_NOTI_ENTER_FIELD.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_NOTI_ENTER_FIELD != null)
                    {
                        processor_SC_NOTI_ENTER_FIELD(read);
                    }
                }
                else if ((network.opcode)_opcode == network.opcode.SC_NOTI_MOVE_OBJECT)
                {
                    GAME.SC_NOTI_MOVE_OBJECT read = GAME.SC_NOTI_MOVE_OBJECT.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_NOTI_MOVE_OBJECT != null)
                    {
                        processor_SC_NOTI_MOVE_OBJECT(read);
                    }
                }
                else if ((network.opcode)_opcode == network.opcode.SC_NOTI_LEAVE_FIELD)
                {
                    GAME.SC_NOTI_LEAVE_FIELD read = GAME.SC_NOTI_LEAVE_FIELD.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_NOTI_LEAVE_FIELD != null)
                    {
                        processor_SC_NOTI_LEAVE_FIELD(read);
                    }
                }
                else if ((network.opcode)_opcode == network.opcode.SC_PING)
                {
                    GAME.CS_PING send = new GAME.CS_PING();
                    send.Timestamp = instance_.getServerTimestamp();
                    instance_.send_protobuf(network.opcode.CS_PING, send);
                    //GAME.SC_PING read = GAME.SC_PING.Parser.ParseFrom(proto_buffer);
                    //ping_time = getServerTimestamp() - protobuf_session.send_time;
                    //Debug.Log("ping time: " + ping_time);
                }
                else if ((network.opcode)_opcode == network.opcode.SC_NOTI_USE_SKILL)
                {
                    GAME.SC_NOTI_USE_SKILL read = GAME.SC_NOTI_USE_SKILL.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_NOTI_USE_SKILL != null)
                    {
                        processor_SC_NOTI_USE_SKILL(read);
                    }
                }
                else if ((network.opcode)_opcode == network.opcode.SC_NOTI_DESTROY_SKILL)
                {
                    GAME.SC_NOTI_DESTROY_SKILL read = GAME.SC_NOTI_DESTROY_SKILL.Parser.ParseFrom(proto_buffer);
                    if (processor_SC_NOTI_DESTROY_SKILL != null)
                    {
                        processor_SC_NOTI_DESTROY_SKILL(read);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log(e);
                Debug.Log("protobuf 읽다가 에러");
            }
        }
    }