blob: a115443d9517405258fc6b13fdca0eb09e2267f2 [file] [log] [blame]
Jon Skeetad748532009-06-25 16:55:58 +01001// Protocol Buffers - Google's data interchange format
2// Copyright 2008 Google Inc. All rights reserved.
3// http://github.com/jskeet/dotnet-protobufs/
4// Original C++/Java/Python code:
5// http://code.google.com/p/protobuf/
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions are
9// met:
10//
11// * Redistributions of source code must retain the above copyright
12// notice, this list of conditions and the following disclaimer.
13// * Redistributions in binary form must reproduce the above
14// copyright notice, this list of conditions and the following disclaimer
15// in the documentation and/or other materials provided with the
16// distribution.
17// * Neither the name of Google Inc. nor the names of its
18// contributors may be used to endorse or promote products derived from
19// this software without specific prior written permission.
20//
21// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32using System;
Jon Skeet3f225112008-11-24 16:09:39 +000033
34namespace Google.ProtocolBuffers.Examples.AddressBook
35{
36 /// <summary>
37 /// Entry point. Repeatedly prompts user for an action to take, delegating actual behaviour
38 /// to individual actions. Each action has its own Main method, so that it can be used as an
39 /// invidual complete program.
40 /// </summary>
41 class Program {
42 static int Main(string[] args) {
43 if (args.Length > 1) {
44 Console.Error.WriteLine("Usage: AddressBook [file]");
45 Console.Error.WriteLine("If the filename isn't specified, \"addressbook.data\" is used instead.");
46 return 1;
47 }
48 string addressBookFile = args.Length > 0 ? args[0] : "addressbook.data";
49
50 bool stopping = false;
51 while (!stopping) {
52 Console.WriteLine("Options:");
53 Console.WriteLine(" L: List contents");
54 Console.WriteLine(" A: Add new person");
55 Console.WriteLine(" Q: Quit");
56 Console.Write("Action? ");
57 Console.Out.Flush();
58 char choice = Console.ReadKey().KeyChar;
59 Console.WriteLine();
60 try {
61 switch (choice) {
62 case 'A':
63 case 'a':
64 AddPerson.Main(new string[] { addressBookFile });
65 break;
66 case 'L':
67 case 'l':
68 ListPeople.Main(new string[] { addressBookFile });
69 break;
70 case 'Q':
71 case 'q':
72 stopping = true;
73 break;
74 default:
75 Console.WriteLine("Unknown option: {0}", choice);
76 break;
77 }
78 } catch (Exception e) {
79 Console.WriteLine("Exception executing action: {0}", e);
80 }
81 Console.WriteLine();
82 }
83 return 0;
84 }
85 }
86}