예제 #1
0
        private static void TestByteArrayReference(bool enabled = true)
        {
            if (!enabled)
            {
                return;
            }

            // 소스 패킷
            MockPacket srcPacket = new MockPacket(1, new MockPacketBody(1, Encoding.UTF8.GetBytes("Hello")));
            // 타겟 패킷: 소스 패킷의 바디의 데이터 부분만 참조
            MockPacket tgtPacket = new MockPacket(2, new MockPacketBody(1, srcPacket.Bodies[0].Data));

            Console.WriteLine($"Source Packet, data:{Encoding.UTF8.GetString(srcPacket.Bodies[0].Data)}");
            Console.WriteLine($"Target Packet, data:{Encoding.UTF8.GetString(tgtPacket.Bodies[0].Data)}");

            // 소스 패킷의 바디의 데이터 변경 (기존 데이터 변경)
            srcPacket.Bodies[0].Data[1] = 97;

            Console.WriteLine($"Source Packet, data:{Encoding.UTF8.GetString(srcPacket.Bodies[0].Data)}");
            Console.WriteLine($"Target Packet, data:{Encoding.UTF8.GetString(tgtPacket.Bodies[0].Data)}");

            // 소스 패킷의 바디의 데이터 변경 (새로 할당)
            srcPacket.Bodies[0].Data = Encoding.UTF8.GetBytes("World");

            Console.WriteLine($"Source Packet, data:{Encoding.UTF8.GetString(srcPacket.Bodies[0].Data)}");
            Console.WriteLine($"Target Packet, data:{Encoding.UTF8.GetString(tgtPacket.Bodies[0].Data)}");
        }
예제 #2
0
        /// <summary>
        /// List 객체 참조 테스트
        /// </summary>
        /// <remarks>
        /// - 객체를 참조하는 경우, 원본 객체가 변경되면 참조하는 쪽에도 변경사항이 반영 됨
        /// - 원본 객체가 새로 할당되는 경우, 참조 객체는 원본 객체의 기존 값을 유지하므로 연결 관계는 끊어짐
        /// </remarks>
        /// <param name="enabled"></param>
        private static void TestListReference(bool enabled = true)
        {
            if (!enabled)
            {
                return;
            }

            // 원본 데이터
            byte[] data = Encoding.UTF8.GetBytes("12345");

            // 원본 데이터를 포함하는 패킷바디
            MockPacketBody orgPacketBody = new MockPacketBody {
                CompressionType = 0, Data = data
            };
            MockPacket orgPacket = new MockPacket {
                PacketType = 1, Bodies = new List <MockPacketBody> {
                    orgPacketBody
                }
            };

            // 패킷 데이터를 그대로 참조하는 패킷바디 복사본
            MockPacket newPacket = new MockPacket {
                PacketType = 2, Bodies = orgPacket.Bodies
            };

            // 원본 패킷의 패킷바디 변경
            orgPacket.Bodies[0].Data = Encoding.UTF8.GetBytes("ABCDE");

            // 원본 패킷의 패킷바디 출력
            Console.WriteLine($"Original Packet, data:{Encoding.UTF8.GetString(orgPacket.Bodies[0].Data)}");
            // 클론 패킷의 패킷바디 출력
            Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}");

            // 원본 패킷을 삭제
            orgPacket = null;

            // 클론 패킷의 패킷바디 출력
            Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}");

            // 원본 패킷을 새로 할당
            orgPacket = new MockPacket {
                PacketType = 2, Bodies = new List <MockPacketBody> {
                    new MockPacketBody {
                        CompressionType = 0, Data = Encoding.UTF8.GetBytes("98765")
                    }
                }
            };

            // 원본 패킷의 패킷바디 출력
            Console.WriteLine($"Original Packet, data:{Encoding.UTF8.GetString(orgPacket.Bodies[0].Data)}");
            // 클론 패킷의 패킷바디 출력
            Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}");
        }