public void run() { IPEndPoint ipep = new IPEndPoint(IPAddress.Any, setting.port); Socket newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newSocket.Bind(ipep); newSocket.Listen(10); IDcounter = 0; roomIDcounter = 0; lobby = new chatRoom(roomIDcounter++, "Lobby"); roomList.Add(lobby); while (true) { Socket socket = newSocket.Accept(); chatSocket client = new chatSocket(socket); try { clientList.Add(client); lobby.clientList.Add(client); client.newListener(processMessage); client.ID = IDcounter; Console.WriteLine("New user with ID: " + IDcounter); client.sendMessage("REGNEWUSER:" + IDcounter); IDcounter++; } catch (Exception e) { Console.WriteLine(e.Message); } } }
public String processMessage(String msg) { Console.WriteLine("RECEIVED:" + msg); char[] del = { ':' }; String[] words = msg.Split(del); // super large if/else if (words[0].Equals("AVAILABLEID")) {// AVAILABLEID:senderID:sID bool found = false; foreach (chatSocket client in clientList) { if (String.IsNullOrEmpty(client.sID)) { continue; } if (client.sID.Equals(words[2])) { found = true; break; } } if (found) { messageToPerson(Convert.ToInt32(words[1]), "AVAILABLEID:USED"); } else { messageToPerson(Convert.ToInt32(words[1]), "AVAILABLEID:USABLE"); } } else if (words[0].Equals("MESSAGE")) {// MESSAGE:roomID:senderID:color:message chatSocket client = clientNo(Convert.ToInt32(words[2])); msg = "MESSAGE:" + words[1] + ":" + client.sID + ":" + words[3] + ":" + words[4]; messageToRoom(Convert.ToInt32(words[1]), msg); } else if (words[0].Equals("IDPHOTO")) {// IDPHOTO:senderID:fileLength int fileLength = Convert.ToInt32(words[2]); Byte[] buffer = new Byte[fileLength]; int ID = Convert.ToInt32(words[1]); fileFromPerson(clientNo(ID), buffer); messageToEveryone(msg); fileToEveryone(buffer); } else if (words[0].Equals("FILE")) {// FILE:senderID:receiverID:fileLength:fileName int fileLength = Convert.ToInt32(words[3]); Byte[] buffer = new Byte[fileLength]; int senderID = Convert.ToInt32(words[1]); fileFromPerson(clientNo(senderID), buffer); int receiverID = Convert.ToInt32(words[2]); msg = words[0] + ':' + words[1] + ':' + words[3] + ':' + words[4]; messageToPerson(receiverID, msg); fileToPerson(clientNo(receiverID), buffer); } else if (words[0].Equals("SEARCHID")) {// SEARCHID:senderID:ID List<String> IDList = new List<string>(); foreach (chatSocket client in clientList) { if (client.active) { if (client.sID.IndexOf(words[2]) > 0) { IDList.Add(client.sID); } } } int senderID = Convert.ToInt32(words[1]); msg = "SEARCHLISTUPDATE"; foreach (String ID in IDList) { msg += ':' + ID; } messageToPerson(senderID, msg); } else if (words[0].Equals("SECRETMESSAGE")) {// SECRETMESSAGE:senderID:receiverID:message chatSocket client = clientNo(Convert.ToInt32(words[2])); msg = words[0] + ':' + client.sID + ':' + words[3]; messageToPerson(Convert.ToInt32(words[2]), msg); } else if (words[0].Equals("PIC")) {// PIC:roomID:senderID:index chatSocket client = clientNo(Convert.ToInt32(words[2])); msg = words[0] + ":" + words[1] + ":" + client.sID + ":" + words[3]; messageToRoom(Convert.ToInt32(words[1]), msg); } else if (words[0].Equals("WELCOME")) {// WELCOME:senderID:sID int thisID = Convert.ToInt32(words[1]); chatSocket client = clientNo(thisID); client.sID = words[2]; msg += ":" + Convert.ToInt32(clientList.Count); foreach (chatSocket person in clientList) { msg += ":" + Convert.ToInt32(person.ID) + ":" + person.sID; } messageToRoom(lobby.ID, msg); } else if (words[0].Equals("NEWROOM")) {// NEWROOM:senderID:invitedID chatRoom newRoom = new chatRoom(roomIDcounter, ""); chatSocket sendClient = clientNo(Convert.ToInt32(words[1])); chatSocket invitedClient = clientNo(Convert.ToInt32(words[2])); newRoom.clientList.Add(sendClient); newRoom.clientList.Add(invitedClient); roomList.Add(newRoom); msg = "NEWROOM:" + roomIDcounter.ToString() + ":"; messageToPerson(sendClient.ID, msg + invitedClient.sID); messageToPerson(invitedClient.ID, msg + sendClient.sID); roomIDcounter++; } else if (words[0].Equals("INVITE")) {// INVITE:senderID:invitedID:roomID foreach (chatRoom room in roomList) { if (room.ID == Convert.ToInt32(words[3])) { room.clientList.Add(clientNo(Convert.ToInt32(words[2]))); msg = "INVITE:" + clientNo(Convert.ToInt32(words[1])).sID + ":" + words[3]; messageToPerson(Convert.ToInt32(words[2]), msg); break; } } } else if (words[0].Equals("SHUTDOWN")) { foreach (chatSocket clnt in clientList) { if (clnt.sID.Equals(words[1])) { clientList.Remove(clnt); break; } } } else if (words[0].Equals("CALL")) {// CHAT:ID1:ID2:sID1 chatSocket client1 = clientNo(Convert.ToInt32(words[1])); chatSocket client2 = clientNo(Convert.ToInt32(words[2])); String IP1 = client1.socket.RemoteEndPoint.ToString(); String IP2 = client2.socket.RemoteEndPoint.ToString(); IP1 = IP1.Substring(0, IP1.IndexOf(':')); IP2 = IP2.Substring(0, IP2.IndexOf(':')); //messageToPerson(client1.ID, "CALL:" + IP1 + ":" + IP2); messageToPerson(client2.ID, "CALL:" + IP2 + ":" + IP1 + ":" +client1.sID); } else { Console.WriteLine("ERROR OCCCURRED"); } return ""; }