public void ReadFromFile() { if (File.Exists(currentFile)) { clients.Clear(); string[] lines = File.ReadAllLines(currentFile); foreach (var line in lines) { if (line.Length > 0) { List <string> clientElements = line.Split(",").ToList(); List <string> clientSubjects = clientElements[2].Split("@").ToList(); ClientElements client = new ClientElements(clientElements[0], clientElements[1], clientSubjects); clients.Add(client); Console.WriteLine("Added client: " + clientElements[0] + " " + clientElements[1] + " " + client.printSubjects()); } } } }
public Response SwitchCase(string incomingInfo, Socket socket) { Response response = new Response(); string[] array = incomingInfo.Split(","); string val = array[0]; string RQ = null; string Name = null; string ipAddress = null; switch (val) { case "REGISTER": RQ = array[1]; Name = array[2]; ipAddress = array[3]; var User1 = new ClientElements(Name, ipAddress); response.clientValid = true; if (clients.Any(i => i.clientName.Equals(Name))) { //Register-Denied response.message = "REGISTER-DENIED,"; response.message += RQ + ",Name is already in use"; response.serverValid = false; } else { clients.Add(User1); response.message = "REGISTERED,"; response.message += RQ + "," + Name + "," + ipAddress; response.serverValid = true; WriteToFile(clients); } return(response); case "DE-REGISTER": response.clientValid = true; RQ = array[1]; Name = array[2]; if (clients.Any(i => i.clientName.Equals(Name))) { //de-register clients.RemoveAll(n => n.clientName.Equals(Name)); response.message = "DE-REGISTERED,"; response.message += Name; response.serverValid = true; RemoveClientFromFile(array[2]); } else { response.serverValid = false; response.message = "User not registered"; } return(response); case "UPDATE": RQ = array[1]; Name = array[2]; ipAddress = array[3]; response.clientValid = true; if (clients.Any(i => i.clientName.Equals(Name))) { var element = clients.Find(obj => obj.clientName.Equals(Name)); element.changeIP(ipAddress); clients[clients.FindIndex(obj => obj.clientName.Equals(Name))] = element; response.message = "UPDATE-CONFIRMED,"; response.message += RQ + "," + Name + "," + ipAddress; UpdateIPInFile(element.clientName, array[3]); response.serverValid = true; } else { response.message = "UPDATE-DENIED,"; response.message += RQ + "," + Name + " does not exist"; response.serverValid = false; } return(response); case "PUBLISH": RQ = array[1]; Name = array[2]; string subj = array[3]; string userMessage = array[4]; ipAddress = array[5]; bool subjectInterest = false; response.clientValid = true; response.message = String.Format("MESSAGE,{0},{1},{2}", Name, subj, userMessage); foreach (ClientElements element in clients) { if (element.clientSubjects.Contains(subj)) { List <string> ipandPort = element.ipAddress.Split(":").ToList(); IPEndPoint clientIP = new IPEndPoint(IPAddress.Parse(ipandPort[0]), Int32.Parse(ipandPort[1])); byte[] userFeed = Encoding.ASCII.GetBytes(response.message); socket.SendTo(userFeed, 0, userFeed.Length, SocketFlags.None, clientIP); subjectInterest = true; } } if (!subjectInterest) { response.message = String.Format("PUBLISH-DENIED,{0},{1}, Error, no clients contain such a subject", Name, subj); return(response); } response.message = ""; response.serverValid = false; return(response); case "SUBJECTS": RQ = array[1]; Name = array[2]; response.clientValid = true; List <string> newSubs = array[3].Split("@").ToList(); if (clients.Any(i => i.clientName.Equals(Name))) { var element = clients.Find(obj => obj.clientName.Equals(Name)); element.clientSubjects = new List <string>(); element.clientSubjects = newSubs; response.message = String.Format("SUBJECTS-UPDATED,{0},{1},{2}", RQ, Name, array[3]); UpdateSubjectsInFile(element.clientName, array[3]); response.serverValid = true; } else { response.message = String.Format("SUBJECTS-REJECTED,{0},{1},{2}", RQ, Name, array[3]); response.serverValid = false; } return(response); case "WAKE-UP": if (UdpServer.sleeping) { string thisServerIP = array[2]; UdpServer.sleeping = false; foreach (ClientElements element in clients) { List <string> ipandPort = element.ipAddress.Split(":").ToList(); IPEndPoint clientIP = new IPEndPoint(IPAddress.Parse(ipandPort[0]), Int32.Parse(ipandPort[1])); byte[] userFeed = Encoding.ASCII.GetBytes("CHANGE-SERVER," + thisServerIP); socket.SendTo(userFeed, 0, userFeed.Length, SocketFlags.None, clientIP); } Console.WriteLine("\nI'M AWAKE\nTelling other server to sleep."); response.serverValid = true; response.message = "GO-SLEEP"; } return(response); case "GO-SLEEP": Console.WriteLine("\nI'M ASLEEP\nI was told to go sleep, And now I sleep...zzz"); UdpServer.sleeping = true; response.serverValid = false; return(response); case "UPDATE-SERVER": string otherServerIP = array[1]; foreach (ClientElements element in clients) { List <string> ipandPort = element.ipAddress.Split(":").ToList(); IPEndPoint clientIP = new IPEndPoint(IPAddress.Parse(ipandPort[0]), Int32.Parse(ipandPort[1])); byte[] userFeed = Encoding.ASCII.GetBytes("UPDATE-OTHER-SERVER," + otherServerIP); socket.SendTo(userFeed, 0, userFeed.Length, SocketFlags.None, clientIP); } //response.serverValid = true; //response.message = "SENT-FILE," + SendWholeFile(); return(response); case "SENT-FILE": var a = incomingInfo.Split(Environment.NewLine).ToArray(); List <string> fullFile = new List <string>(); Console.WriteLine("*INCOMING INFO**"); Console.WriteLine(incomingInfo); List <string> newClientFile = incomingInfo.Split("\n").ToList(); newClientFile[0] = newClientFile[0].Replace("SENT-FILE,", ""); newClientFile.RemoveAt(newClientFile.Count - 1); File.WriteAllLines(currentFile, newClientFile); ReadFromFile(); return(response); default: return(response); } }