void PRIVMSG(User user, string prms) { int splitter = prms.IndexOf(' '); if (splitter == -1) { user.SendError("001"); throw new FormatException("PRIVMSG <username> <msg>"); } string targetName = prms.Substring(0, splitter); string message = prms.Substring(splitter + 1); User target = userList.Find(targetName); string formattedMessage = "PRIVMSG " + user.name + ": " + message; if (target == null) { user.SendError("003"); return; } try { target.SendMessage(formattedMessage); } catch { user.SendError("002"); return; } user.SendMessage(formattedMessage); }
void LOGIN(User user, string prms) { string[] splitted = prms.Split(' '); if (splitted.Count() < 2) { throw new FormatException("LOGIN <name> <password>"); } string name = splitted[0]; string password = splitted[1]; if (register.Contains(name) && register.Check(name, password)) { user.name = name; user.SendError("055"); userList.SendNamesToAll(); userList.SendMessageToAll("MSG " + name + " вернулся к нам!"); user.SendYouAre(); Log.Write(name + " зашёл."); userList.OnListChanged(); } else { user.SendError("054"); } }
/* * void NAMES(User user, string prms) * { * string message = "NAMES"; * foreach (User one in users) * { * message += " " + one.name; * } * SendMessage(user, message); * } */ /* * void DATE(User user, string prms) * { * user.SendMessage("MSG " + DateTime.Now.Date.ToLongDateString()); * } */ void REG(User user, string prms) { string[] splitted = prms.Split(' '); if (splitted.Count() < 2) { throw new FormatException("REG <name> <password>"); } if (register.Add(splitted[0], splitted[1])) { user.SendError("053"); register.Save(); } else { user.SendError("051"); } }
void MSG(User user, string prms) { if (prms == "") { user.SendError("001"); throw new FormatException("MSG <msg>"); } string message = "MSG " + user.name + ": " + prms; userList.SendMessageToAll(message); }
void NICK(User user, string prms) { rndNick.Remove(user.name); string newName = rndNick.GetNew(); Log.Write(user.name + " changed nick to " + newName); userList.SendMessageToAll(("MSG " + user.name + " изменил ник на " + newName)); user.name = newName; user.SendError("050"); userList.SendNamesToAll(); user.SendYouAre(); userList.OnListChanged(); }
void ClientThread(Object userObject) { User user = (User)userObject; Log.Write(String.Format("Подключен клиент: {0}", user.client.Client.RemoteEndPoint.ToString())); user.SendMessage("YOUARE " + user.name); string date = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString(); user.SendMessage(String.Format("MSG Тебя приветствует сервер {0}! Время на сервере: {1}", name, date)); userList.SendMessageToAll("MSG " + user.name + " присоединился к чату."); userList.SendNamesToAll(); while (!stopped) { string mess = ""; try { mess = user.GetNextMessage(); } catch (SocketException) { if (stopped) { return; } Log.Write(String.Format("Ошибка получения сообщения! " + "Подключение с {0} будет разорвано!", user.name)); userList.Remove(user); userList.SendNamesToAll(); return; } catch (ObjectDisposedException) { if (stopped) { return; } Log.Write(String.Format("Ошибка получения сообщения! " + "Подключение с {0} было разорвано!", user.name)); userList.Remove(user); userList.SendNamesToAll(); return; } //Log.Write("получил: "+mess); int splitter = mess.IndexOf(' '); string comm, prms; if (splitter > 0) { comm = mess.Substring(0, splitter); prms = mess.Substring(splitter + 1); } else { comm = mess; prms = ""; } try { commandsMap[comm](user, prms); } catch (KeyNotFoundException) { user.SendError("001"); Log.Write("Неизвестная команда: " + mess); } catch (FormatException fe) { user.SendError("001"); Log.Write("Ожидалось: " + fe.Message + ". Получено: " + mess); } catch (IOException) { Log.Write("Ошибка отправки сообщения. Соединение будет разорвано."); userList.Remove(user); return; } } }