· 3 years ago · May 19, 2022, 01:30 PM
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using BusinessLayer;
7
8namespace Client
9{
10 class Program
11 {
12 static Dictionary<Type, object> recievedOperation = new Dictionary<Type, object>();
13 static Dictionary<Type, object> recievedData = new Dictionary<Type, object>();
14 static BinaryMessage operationToSend = new BinaryMessage();
15 static BinaryMessage dataToSend = new BinaryMessage();
16
17 static void Main(string[] args)
18 {
19 try
20 {
21 ClientManager.InitializeClient();
22
23 do
24 {
25 ShowMenu();
26
27 if (!ClientManager.CommunicationIsActive)
28 {
29 break;
30 }
31
32 } while (ClientManager.ContinueCommunicating());
33
34 EndCommunication();
35
36 Console.WriteLine("Press any key to close the client API!");
37 Console.ReadKey();
38 }
39 catch (Exception ex)
40 {
41 Console.WriteLine(ex.Message);
42 Console.WriteLine("Press any key to close the program");
43 Console.ReadKey();
44 }
45 finally
46 {
47 ClientManager.CloseConnection();
48 }
49 }
50
51 private static void ShowMenu()
52 {
53 Console.WriteLine(Environment.NewLine);
54 Console.WriteLine("Select option:");
55 Console.WriteLine("1) Create User");
56 Console.WriteLine("2) Create Message");
57 Console.WriteLine("3) View Users");
58 Console.WriteLine("4) View Messages");
59 Console.WriteLine("5) Send Message to User via Server");
60 Console.WriteLine("6) Exit");
61
62 Console.Write("Your choice: ");
63 int choice = Convert.ToInt32(Console.ReadLine());
64
65 switch (choice)
66 {
67 case 1: CreateUser(); break;
68 case 2: CreateMessage(); break;
69 case 3: ViewUsers(); break;
70 case 4: ViewMessages(); break;
71 case 5: SendMessageToUser(); break;
72 case 6: ClientManager.CommunicationIsActive = false; break;
73 default: throw new ArgumentException("Invalid option!");
74 }
75 }
76
77 private static void CreateUser()
78 {
79 Console.Write("Age: ");
80 int age = Convert.ToInt32(Console.ReadLine());
81
82 Console.Write("Name: ");
83 string name = Console.ReadLine();
84
85 User user = new User(age, name);
86
87 operationToSend = TransformDataManager.Serialize(1);
88 dataToSend = TransformDataManager.Serialize(user);
89
90 ClientManager.SendMessage(operationToSend);
91 ClientManager.SendMessage(dataToSend);
92 }
93
94 private static void CreateMessage()
95 {
96 Console.Write("Title: ");
97 string title = Console.ReadLine();
98
99 Console.Write("Text: ");
100 string text = Console.ReadLine();
101
102 Console.Write("Sender [enter the index of the Users array]: ");
103 int index = Convert.ToInt32(Console.ReadLine());
104
105 operationToSend = TransformDataManager.Serialize(6);
106 dataToSend = TransformDataManager.Serialize(index);
107
108 ClientManager.SendMessage(operationToSend);
109 ClientManager.SendMessage(dataToSend);
110
111 recievedData = ClientManager.WaitForMessage();
112
113 User sender = recievedData[typeof(User)] as User;
114
115 Message message = new Message(title, text, sender);
116
117 operationToSend = TransformDataManager.Serialize(2);
118 dataToSend = TransformDataManager.Serialize(message);
119
120 ClientManager.SendMessage(operationToSend);
121 ClientManager.SendMessage(dataToSend);
122 }
123
124 private static void ViewUsers()
125 {
126 operationToSend = TransformDataManager.Serialize(3);
127 dataToSend = TransformDataManager.Serialize(string.Empty);
128
129 ClientManager.SendMessage(operationToSend);
130 ClientManager.SendMessage(dataToSend);
131
132 recievedData = ClientManager.WaitForMessage();
133
134 List<User> users = recievedData[typeof(List<User>)] as List<User>;
135
136 Console.WriteLine(Environment.NewLine + "Users Information:");
137
138 foreach (User user in users)
139 {
140 Console.WriteLine("ID: {0}", user.ID);
141 Console.WriteLine("Age: {0} # Name: {1}", user.Age, user.Name);
142 }
143 Console.WriteLine();
144 }
145
146 private static void ViewMessages()
147 {
148 operationToSend = TransformDataManager.Serialize(4);
149 dataToSend = TransformDataManager.Serialize(string.Empty);
150
151 ClientManager.SendMessage(operationToSend);
152 ClientManager.SendMessage(dataToSend);
153
154 recievedData = ClientManager.WaitForMessage();
155
156 List<Message> messages = recievedData[typeof(List<Message>)] as List<Message>;
157
158 Console.WriteLine(Environment.NewLine + "Messages Information:");
159
160 foreach (Message message in messages)
161 {
162 Console.WriteLine("ID: {0}", message.ID);
163 Console.WriteLine("Title: {0} # Text: {1}", message.Title, message.Text);
164 }
165 Console.WriteLine();
166 }
167
168 private static void SendMessageToUser()
169 {
170 Console.Write("Message [enter the index of the Messages array]: ");
171 int messageIndex = Convert.ToInt32(Console.ReadLine());
172
173 operationToSend = TransformDataManager.Serialize(7);
174 dataToSend = TransformDataManager.Serialize(messageIndex);
175
176 ClientManager.SendMessage(operationToSend);
177 ClientManager.SendMessage(dataToSend);
178
179 recievedData = ClientManager.WaitForMessage();
180 Message message = recievedData[typeof(Message)] as Message;
181
182
183 Console.Write("Sender [enter the index of the Users array]: ");
184 int senderIndex = Convert.ToInt32(Console.ReadLine());
185
186 operationToSend = TransformDataManager.Serialize(6);
187 dataToSend = TransformDataManager.Serialize(senderIndex);
188
189 ClientManager.SendMessage(operationToSend);
190 ClientManager.SendMessage(dataToSend);
191
192 recievedData = ClientManager.WaitForMessage();
193 User sender = recievedData[typeof(User)] as User;
194
195
196 Console.Write("Receiver [enter the index of the Users array]: ");
197 int receiverIndex = Convert.ToInt32(Console.ReadLine());
198
199 operationToSend = TransformDataManager.Serialize(6);
200 dataToSend = TransformDataManager.Serialize(receiverIndex);
201
202 ClientManager.SendMessage(operationToSend);
203 ClientManager.SendMessage(dataToSend);
204
205 recievedData = ClientManager.WaitForMessage();
206 User receiver = recievedData[typeof(User)] as User;
207
208 Message messageToSend = new Message(message.Title, message.Text,
209 sender, receiver);
210
211 operationToSend = TransformDataManager.Serialize(5);
212 dataToSend = TransformDataManager.Serialize(messageToSend);
213
214 ClientManager.SendMessage(operationToSend);
215 ClientManager.SendMessage(dataToSend);
216 }
217
218 public static void EndCommunication()
219 {
220 operationToSend = TransformDataManager.Serialize(8);
221 dataToSend = TransformDataManager.Serialize(string.Empty);
222
223 ClientManager.SendMessage(operationToSend);
224 ClientManager.SendMessage(dataToSend);
225 }
226
227 }
228}
229