/** * Deserialises the Packets received from clients and operates on them * * @param Client which is sent from Client.cs */ public static void SocketMethod(Client client) { try { client.SendText("Welcome User: Enter '/clientend' to terminate Chatroom \n"); int INCOMING_BYTES; while ((INCOMING_BYTES = client.BIN_READER.ReadInt32()) != 0) { byte[] bytes = client.BIN_READER.ReadBytes(INCOMING_BYTES); MemoryStream MEMORY_STREAM = new MemoryStream(bytes); BinaryFormatter formatter = new BinaryFormatter(); PACKET RECEIVED_PACKET = formatter.Deserialize(MEMORY_STREAM) as PACKET; switch (RECEIVED_PACKET.PACKET_TYPE) { case PACKET_TYPE_ENUM.NICKNAME: string nickname = ((NICKNAME_PACKET)RECEIVED_PACKET).nickname; client.SetNickname(nickname); break; case PACKET_TYPE_ENUM.CHAT_MESSAGE: string message = client.GetNickname() + ((CHAT_MESSAGE)RECEIVED_PACKET).message; foreach (Client c in _clients) { if (message != "/clientend") c.SendText(message); else if (message == "/clientend") c.Stop(); } break; case PACKET_TYPE_ENUM.USER_LIST: List<string> uList = ((USER_LIST)RECEIVED_PACKET).userList; client.SendList(uList); break; default: break; } } } catch (Exception e) { Console.WriteLine("Error occured: " + e.Message); } finally { client.Stop(); } }
public static void SocketMethod(Client client) { try { Socket socket = client.Socket; NetworkStream stream = client.Stream; BinaryReader bReader = client.bReader; client.SendTextPacket("Successfully Connected", null); int noOfIncomingBytes; while ((noOfIncomingBytes = bReader.ReadInt32()) != 0) { byte[] bytes = bReader.ReadBytes(noOfIncomingBytes); MemoryStream memoryStream = new MemoryStream(bytes); BinaryFormatter formatter = new BinaryFormatter(); Packet packet = formatter.Deserialize(memoryStream) as Packet; switch (packet.type) { case (PacketType.NICKNAME): string name = ((NicknamePacket)packet).nickName; client.SetUsername(name); string[] clientList = clients.ConvertAll(c=>c.userName).ToArray(); foreach (Client c in clients) { if (c != null) { c.SendClientList(clientList); } } break; case (PacketType.CHATMESSAGE): string sender = ((ChatMessagePacket)packet).sender; string message = sender + " : " + ((ChatMessagePacket) packet).chatMessage; Console.WriteLine(message); foreach (Client c in clients) { if (c != null) { c.SendTextPacket(message, sender); } } break; case (PacketType.SYSTEM): SysPacket systemPacket = ((SysPacket)packet); string sysMessage = systemPacket.message; if (systemPacket.sysType.Equals(SystemType.DISCONNECTED)) { sysMessage = "[System] " + client.userName + " " + sysMessage; Client temp = null; foreach (Client c in clients) { if ( c.GetUsername().Equals(systemPacket.sender)) { temp = c; } } clients.Remove(temp); String[] clients2 = clients.ConvertAll(con => con.userName).ToArray(); Console.WriteLine(sysMessage); foreach (Client c in clients) { c.SendTextPacket(c.GetUsername(), sysMessage); c.SendClientList(clients2); } } break; } } } catch (Exception e) { Console.WriteLine("Error occured: " + e.Message); } finally { client.Stop(); } }
/** * Starts the server */ public void Start() { _tcpListener.Start(); Console.WriteLine("Listening..."); while(true) { Socket socket = _tcpListener.AcceptSocket(); Client client = new Client(socket); _clients.Add(client); _userList.Add(client.GetNickname()); client.Start(); } }
public void Start() { _tcpListener.Start(); Console.WriteLine("Listening..."); while (true) { Socket socket = _tcpListener.AcceptSocket(); Client client = new Client(socket, "User"); clients.Add(client); client.Start(); } }