/// <summary> /// Builds a person based on user input /// </summary> static Person PromptForAddress(TextReader input, TextWriter output) { Person.Builder person = Person.CreateBuilder(); 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.Builder phoneNumber = Person.Types.PhoneNumber.CreateBuilder().SetNumber(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.AddPhone(phoneNumber); } return(person.Build()); }
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); }
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 }); }