Exemplo n.º 1
0
        public void Run(Person.Types.PhoneType phoneType, string number, bool isCompositeBuffer)
        {
            var phoneNumber = new Person.Types.PhoneNumber
            {
                Type   = phoneType,
                Number = number
            };

            var channel = new EmbeddedChannel(
                new ProtobufVarint32FrameDecoder(),
                new ProtobufDecoder(Person.Types.PhoneNumber.Parser),
                new ProtobufVarint32LengthFieldPrepender(),
                new ProtobufEncoder());

            Assert.True(channel.WriteOutbound(phoneNumber));
            var buffer = channel.ReadOutbound <IByteBuffer>();

            Assert.NotNull(buffer);
            Assert.True(buffer.ReadableBytes > 0);

            var data = new byte[buffer.ReadableBytes];

            buffer.ReadBytes(data);

            IByteBuffer inputBuffer;

            if (isCompositeBuffer)
            {
                inputBuffer = new CompositeByteBuffer(UnpooledByteBufferAllocator.Default, 2,
                                                      Unpooled.CopiedBuffer(data, 0, 2),
                                                      Unpooled.CopiedBuffer(data, 2, data.Length - 2));
            }
            else
            {
                inputBuffer = Unpooled.WrappedBuffer(data);
            }

            Assert.True(channel.WriteInbound(inputBuffer));

            var message = channel.ReadInbound <IMessage>();

            Assert.NotNull(message);
            Assert.IsType <Person.Types.PhoneNumber>(message);
            var roundTripped = (Person.Types.PhoneNumber)message;

            Assert.Equal(phoneNumber.Type, roundTripped.Type);
            Assert.Equal(phoneNumber.Number, roundTripped.Number);

            Assert.False(channel.Finish());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Builds a person based on user input
        /// </summary>
        private static Person PromptForAddress(TextReader input, TextWriter output)
        {
            Person person = new Person();

            output.Write("Enter person ID: ");
            person.Id = int.Parse(input.ReadLine());

            output.Write("Enter name: ");
            person.Name = input.ReadLine();

            output.Write("Enter email address (blank for none): ");
            string email = input.ReadLine();
            if (email.Length > 0)
            {
                person.Email = email;
            }

            while (true)
            {
                output.Write("Enter a phone number (or leave blank to finish): ");
                string number = input.ReadLine();
                if (number.Length == 0)
                {
                    break;
                }

                Person.Types.PhoneNumber phoneNumber = new Person.Types.PhoneNumber { Number = number };

                output.Write("Is this a mobile, home, or work phone? ");
                String type = input.ReadLine();
                switch (type)
                {
                    case "mobile":
                        phoneNumber.Type = Person.Types.PhoneType.Mobile;
                        break;
                    case "home":
                        phoneNumber.Type = Person.Types.PhoneType.Home;
                        break;
                    case "work":
                        phoneNumber.Type = Person.Types.PhoneType.Work;
                        break;
                    default:
                        output.Write("Unknown phone type. Using default.");
                        break;
                }

                person.Phones.Add(phoneNumber);
            }
            return person;
        }
        public void Run2(Person.Types.PhoneType phoneType, string number, bool isCompositeBuffer)
        {
            var builder = new Person.Types.PhoneNumber.Builder();

            builder.SetType(phoneType);
            builder.SetNumber(number);
            Person.Types.PhoneNumber phoneNumber = builder.Build();

            IMessageLite protoType = builder.DefaultInstanceForType;
            var          channel   = new EmbeddedChannel(
                new ProtobufVarint32FrameDecoder(),
                new ProtobufDecoder(protoType, null),
                new ProtobufVarint32LengthFieldPrepender(),
                new ProtobufEncoder());

            Assert.True(channel.WriteOutbound(phoneNumber));
            var buffer = channel.ReadOutbound <IByteBuffer>();

            Assert.NotNull(buffer);

            Assert.True(buffer.ReadableBytes > 0);
            var data = new byte[buffer.ReadableBytes];

            buffer.ReadBytes(data);

            IByteBuffer inputBuffer;

            if (isCompositeBuffer)
            {
                inputBuffer = Unpooled.WrappedBuffer(
                    Unpooled.CopiedBuffer(data, 0, 2),
                    Unpooled.CopiedBuffer(data, 2, data.Length - 2));
            }
            else
            {
                inputBuffer = Unpooled.WrappedBuffer(data);
            }

            Assert.True(channel.WriteInbound(inputBuffer));

            var message = channel.ReadInbound <IMessageLite>();

            Assert.NotNull(message);
            Assert.IsType <Person.Types.PhoneNumber>(message);
            var roundTripped = (Person.Types.PhoneNumber)message;

            Assert.Equal(phoneNumber.Type, roundTripped.Type);
            Assert.Equal(phoneNumber.Number, roundTripped.Number);
        }
Exemplo n.º 4
0
        private static void addPhone(IRemoteCache <int, Person> cache)
        {
            int    id = readInt("Enter person id: ");
            Person p  = cache.Get(id);

            if (p == null)
            {
                Console.Error.WriteLine("Person not found");
                return;
            }
            Console.WriteLine(p.ToString());
            var pn = new Person.Types.PhoneNumber();

            pn.Number = readString("Enter phone number: ");
            try
            {
                pn.Type = (Person.Types.PhoneType)Enum.Parse(typeof(Person.Types.PhoneType), readString("Enter phone type: "));
                p.Phone.Add(pn);
                cache.Put(id, p);
            }
            catch
            { }
        }
        public static IEnumerable <object[]> GetAddressBookCases()
        {
            Person.Builder personBuilder = Person.CreateBuilder();
            personBuilder.SetId(1);
            personBuilder.SetName("Foo");
            personBuilder.SetEmail("foo@bar");

            Person.Types.PhoneNumber.Builder phoneBuilder = Person.Types.PhoneNumber.CreateBuilder();
            phoneBuilder.SetType(Person.Types.PhoneType.HOME);
            phoneBuilder.SetNumber("555-1212");
            Person.Types.PhoneNumber phone1 = phoneBuilder.Build();

            personBuilder.AddPhone(phone1);

            Person person1 = personBuilder.Build();

            AddressBook.Builder addressBuilder = AddressBook.CreateBuilder();
            addressBuilder.AddPerson(person1);

            yield return(new object[]
            {
                addressBuilder.Build(),
                false
            });

            yield return(new object[]
            {
                addressBuilder.Build(),
                true
            });

            phoneBuilder = Person.Types.PhoneNumber.CreateBuilder();
            phoneBuilder.SetType(Person.Types.PhoneType.MOBILE);
            phoneBuilder.SetNumber("+61 123456789");

            Person.Types.PhoneNumber phone2 = phoneBuilder.Build();
            personBuilder.AddPhone(phone1);
            personBuilder.AddPhone(phone2);

            addressBuilder = AddressBook.CreateBuilder();
            addressBuilder.AddPerson(person1);

            yield return(new object[]
            {
                addressBuilder.Build(),
                false
            });

            yield return(new object[]
            {
                addressBuilder.Build(),
                true
            });

            personBuilder = Person.CreateBuilder();
            personBuilder.SetId(2);
            personBuilder.SetName("姓名");
            personBuilder.SetEmail("*****@*****.**");

            personBuilder.AddPhone(phone2);
            personBuilder.AddPhone(phone1);

            Person person2 = personBuilder.Build();

            addressBuilder = AddressBook.CreateBuilder();
            addressBuilder.AddPerson(person1);
            addressBuilder.AddPerson(person2);

            yield return(new object[]
            {
                addressBuilder.Build(),
                false
            });

            yield return(new object[]
            {
                addressBuilder.Build(),
                true
            });
        }