예제 #1
0
        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);
        }
예제 #2
0
        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");
            }
        }
예제 #3
0
        /*
         * 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");
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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();
        }
예제 #6
0
        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;
                }
            }
        }