private void InternalRemoveClient(IrcClient removeClient) { var removeRooms = new List <Room>(); foreach (Room r in m_rooms) { if (r.Members.Contains(removeClient)) { r.Members.Remove(removeClient); if (r.Members.Count == 0) { removeRooms.Add(r); } else { string notification = String.Format("309 {0} {1} CR LF", r.GetName(), removeClient.GetNickname()); //RPL_LEAVESUCCEEDED r.SendMessage(notification); } Console.WriteLine("{0} left room {1}", removeClient.GetNickname(), r.GetName()); } } foreach (Room r in removeRooms) { m_rooms.Remove(r); Console.WriteLine("Room {0} was destroyed", r.GetName()); } lock (m_clients) { m_clients.Remove(removeClient); Console.WriteLine("Client {0} disconnected", removeClient.IsRegistered() ? removeClient.GetNickname() : removeClient.ToString()); } }
private void HandleJoin(string[] arguments, IrcClient client) { Console.WriteLine("Received JOIN request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); if (!client.IsRegistered()) { string msg = String.Format("411 JOIN CR LF"); //ERR_NOTREGISTERED client.SendMessage(msg); Console.WriteLine(" Returned 411 (ERR_NOTREGISTERED)"); return; } if (arguments.Count() < 1) { string msg = "412 JOIN CR LF"; //ERR_NEEDMOREPARAMS client.SendMessage(msg); Console.WriteLine(" Returned 412 (ERR_NEEDMOREPARAMS)"); return; } var roomname = arguments[0]; Room room = m_ircServer.GetRoom(roomname); if (room == null) { string msg = String.Format("402 JOIN {0} CR LF", roomname); //ERR_NOSUCHROOM client.SendMessage(msg); Console.WriteLine(" Returned 402 (ERR_NOSUCHROOM): {0}", roomname); return; } if (room.Members.Contains(client)) { string msg = String.Format("404 {0} CR LF", roomname); //ERR_ALREADYJOINED client.SendMessage(msg); Console.WriteLine(" Returned 404 (ERR_ALREADYJOINED): {0}", roomname); return; } if (room.Members.Count >= MAX_NUM_ROOM_MEMBERS) { string msg = String.Format("414 {0} CR LF", roomname); //ERR_ROOMISFULL client.SendMessage(msg); Console.WriteLine(" Returned 414 (ERR_ROOMISFULL): {0}", roomname); return; } string notification = String.Format("308 {0} {1} CR LF", roomname, client.GetNickname()); //RPL_JOINSUCCEEDED room.SendMessage(notification); Console.WriteLine(" Returned 308 (RPL_JOINSUCCEEDED): {0}", roomname); room.Members.Add(client); string response = String.Format("308 {0} CR LF", roomname); //RPL_JOINSUCCEEDED client.SendMessage(response); Console.WriteLine(" Notified room {0} of join", roomname); }
private void HandlePart(string[] arguments, IrcClient client) { Console.WriteLine("Received PART request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); if (!client.IsRegistered()) { string msg = String.Format("411 PART CR LF"); //ERR_NOTREGISTERED client.SendMessage(msg); Console.WriteLine(" Returned 411 (ERR_NOTREGISTERED)"); return; } if (arguments.Count() < 1) { string msg = "412 PART CR LF"; //ERR_NEEDMOREPARAMS client.SendMessage(msg); Console.WriteLine(" Returned 412 (ERR_NEEDMOREPARAMS)"); return; } var roomname = arguments[0]; Room room = m_ircServer.GetRoom(roomname); if (room == null) { string msg = String.Format("402 PART {0} CR LF", roomname); //ERR_NOSUCHROOM client.SendMessage(msg); Console.WriteLine(" Returned 402 (ERR_NOSUCHROOM): {0}", roomname); return; } if (!room.Members.Contains(client)) { string msg = String.Format("403 PART {0} CR LF", roomname); //ERR_NOTINROOM client.SendMessage(msg); Console.WriteLine(" Returned 403 (ERR_NOTINROOM) {0}", roomname); return; } room.Members.Remove(client); string response = String.Format("309 {0} CR LF", roomname); //RPL_PARTSUCCEEDED client.SendMessage(response); Console.WriteLine(" Returned 309 (RPL_PARTSUCCEEDED) {0}", roomname); if (room.Members.Count == 0) { m_ircServer.RemoveRoom(room); return; } string notification = String.Format("309 {0} {1} CR LF", roomname, client.GetNickname()); //RPL_PARTSUCCEEDED room.SendMessage(notification); Console.WriteLine(" Notified room {0} of part", roomname); }
private void HandleNick(string[] arguments, IrcClient client) { Console.WriteLine("Received NICK request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); if (client.IsRegistered()) { string msg = String.Format("413 {0} CR LF", client.GetNickname()); //ERR_ALREADYREGISTERED client.SendMessage(msg); Console.WriteLine(" Returned 413 (ERR_ALREADYREGISTERED)"); return; } if (arguments.Count() < 1) { string msg = "412 NICK CR LF"; //ERR_NEEDMOREPARAMS client.SendMessage(msg); Console.WriteLine(" Returned 412 (ERR_NEEDMOREPARAMS)"); return; } var nickname = arguments[0]; if (nickname.Length > MAX_NICKNAME_LENGTH || nickname.Contains(" ")) { string msg = String.Format("409 {0} CR LF", nickname); //ERR_ERONEOUSNICKNAME client.SendMessage(msg); Console.WriteLine(" Returned 409 (ERR_ERONEOUSNICKNAME): {0}", nickname); return; } if (m_ircServer.IsNicknameInUse(nickname)) { string msg = String.Format("410 {0} CR LF", nickname); //ERR_NICKNAMEINUSE client.SendMessage(msg); Console.WriteLine(" Returned 410 (ERR_NICKNAMEINUSE): {0}", nickname); return; } client.Register(nickname); string response = String.Format("306 {0} CR LF", nickname); //RPL_REGISTERSUCCEEDED client.SendMessage(response); Console.WriteLine(" Returned 306 (RPL_REGISTERSUCCEEDED): {0}", nickname); }
private void HandleUnknownCommand(string command, IrcClient client) { Console.WriteLine("Received uknown request \"{0}\" from {1}", command, client.IsRegistered() ? client.GetNickname() : client.ToString()); string msg = String.Format("408 {0} CR LF", command); //ERR_UNKNOWNCOMMAND client.SendMessage(msg); }
private void HandleNames(string[] arguments, IrcClient client) { Console.WriteLine("Received NAMES request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); if (arguments.Count() < 1) { string msg = "412 NAMES CR LF"; //ERR_NEEDMOREPARAMS client.SendMessage(msg); Console.WriteLine(" Returned 412 (ERR_NEEDMOREPARAMS)"); return; } var roomname = arguments[0]; var room = m_ircServer.GetRoom(roomname); if (room == null) { string msg = String.Format("402 NAMES {0} CR LF", roomname); //ERR_NOSUCHROOM client.SendMessage(msg); Console.WriteLine(" Returned 402 (ERR_NOSUCHROOM)"); return; } client.SendMessage(String.Format("303 {0} CR LF", roomname)); //RPL_NAMESSTART Console.WriteLine(" Returned 303 (RPL_NAMESSTART): {0}", roomname); foreach (IrcClient c in room.Members) { client.SendMessage(String.Format("304 {0} {1} CR LF", roomname, c.GetNickname())); //RPL_NAMES Console.WriteLine(" Returned 304 (RPL_NAMES): room {0}, client: {1}", roomname, c.GetNickname()); } client.SendMessage(String.Format("305 {0} CR LF", roomname)); //RPL_NAMESEND Console.WriteLine(" Returned 305 (RPL_NAMESEND): {0}", roomname); }
private void HandleList(string[] arguments, IrcClient client) { Console.WriteLine("Received LIST request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); var rooms = m_ircServer.GetRooms(); client.SendMessage(String.Format("300 CR LF")); //RPL_LISTSTART Console.WriteLine(" Returned 300 (RPL_LISTSTART)"); foreach (Room r in rooms) { client.SendMessage(String.Format("301 {0} CR LF", r.GetName())); //RPL_LIST Console.WriteLine(" Returned 301 (RPL_LIST): {0}", r.GetName()); } client.SendMessage(String.Format("302 CR LF")); //RPL_LISTEND Console.WriteLine(" Returned 302 (RPL_LISTEND)"); }
private void HandleMsg(string[] arguments, IrcClient client) { Console.WriteLine("Received MSG request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); if (!client.IsRegistered()) { string msg = String.Format("411 MSG CR LF"); //ERR_NOTREGISTERED client.SendMessage(msg); Console.WriteLine(" Returned 411 (ERR_NOTREGISTERED)"); return; } if (arguments.Count() < 2) { string msg = "412 MSG CR LF"; //ERR_NEEDMOREPARAMS client.SendMessage(msg); Console.WriteLine(" Returned 412 (ERR_NEEDMOREPARAMS)"); return; } var roomname = arguments[0]; Room room = m_ircServer.GetRoom(roomname); if (room == null) { string msg = String.Format("402 MSG {0} CR LF", roomname); //ERR_NOSUCHROOM client.SendMessage(msg); Console.WriteLine(" Returned 402 (ERR_NOSUCHROOM): {0}", roomname); return; } if (!room.Members.Contains(client)) { string msg = String.Format("403 MSG {0} CR LF", roomname); //ERR_NOTINROOM client.SendMessage(msg); Console.WriteLine(" Returned 403 (ERR_NOTINROOM): {0}", roomname); return; } string text = arguments[1]; string notification = String.Format("311 {0} {1} \"{2}\" CR LF", roomname, client.GetNickname(), text); //RPL_MSGSUCCEEDED room.SendMessage(notification); Console.WriteLine(" Returned 311 (RPL_MSGSUCCEEDED): {0}", roomname); Console.WriteLine(" Sent message to room {0}", roomname); }
private void HandleCreate(string[] arguments, IrcClient client) { Console.WriteLine("Received CREATE request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); if (!client.IsRegistered()) { string msg = String.Format("411 CREATE CR LF"); //ERR_NOTREGISTERED client.SendMessage(msg); Console.WriteLine(" Returned 411 (ERR_NOTREGISTERED)"); return; } if (arguments.Count() < 1) { string msg = "412 CREATE CR LF"; //ERR_NEEDMOREPARAMS client.SendMessage(msg); Console.WriteLine(" Returned 412 (ERR_NEEDMOREPARAMS)"); return; } var roomname = arguments[0]; if (roomname.Length > MAX_ROOM_LENGTH || roomname.Contains(" ")) { string msg = String.Format("407 {0} CR LF", roomname); //ERR_ERRONEOUSROOMNAME client.SendMessage(msg); Console.WriteLine(" Returned 407 (ERR_ERRONEOUSROOMNAME): {0}", roomname); return; } if (m_ircServer.IsRoomNameInUse(roomname)) { string msg = String.Format("406 {0} CR LF", roomname); //ERR_ROOMNAMEINUSE client.SendMessage(msg); Console.WriteLine(" Returned 406 (ERR_ROOMNAMEINUSE): {0}", roomname); return; } if (m_ircServer.GetNumRooms() >= MAX_ROOM_NUM) { string msg = String.Format("405 {0} CR LF", roomname); //ERR_TOOMANYROOMS client.SendMessage(msg); Console.WriteLine(" Returned 405 (ERR_TOOMANYROOMS): {0}", roomname); return; } m_ircServer.AddRoom(roomname); string response = String.Format("307 {0} CR LF", roomname); //RPL_CREATESUCCEEDED client.SendMessage(response); Console.WriteLine(" Returned 307 (RPL_CREATESUCCEEDED): {0}", roomname); Room room = m_ircServer.GetRoom(roomname); room.Members.Add(client); Console.WriteLine("{0} joined room {1}", client.GetNickname(), room.GetName()); response = String.Format("308 {0} CR LF", roomname); //RPL_JOINSUCCEEDED client.SendMessage(response); Console.WriteLine(" Returned 307 (RPL_JOINSUCCEEDED): {0}", roomname); }
private void HandleQuit(string[] arguments, IrcClient client) { Console.WriteLine("Received QUIT request from {0}", client.IsRegistered() ? client.GetNickname() : client.ToString()); m_ircServer.RemoveClient(client); string response = String.Format("310 CR LF"); //RPL_QUITSUCCEEDED client.SendMessage(response); Console.WriteLine(" Returned 310 (RPL_QUITSUCCEEDED)"); }