2013-06-20 10 views
0

Я разрабатываю чат ajax для PHP. Теперь я хочу добавить команды типа/ban и т. Д.PHP AJAX chat - логика команд чата?

Но я не уверен, как бы я это сделал.

Во-первых, я хочу, чтобы команды начинались с знака '/'.

Должен ли я сначала проверить, начинается ли отправленное сообщение с знака '/', правильно? А затем посмотрите, существует ли команда «ban», но откуда она будет знать, где в предложении будет отображаться имя пользователя?

Я действительно смущен, так как я понятия не имею, где и с чего начать. Есть ли система с открытым исходным кодом, подобная моим потребностям?

+0

Ну, если ** вы ** сами определяете команды, которые должны быть '/ ban user', это довольно просто, чтобы проанализировать входные строки. – Sebas

+0

Вы разрабатываете систему, так что вам решать, как это будет работать ... – crush

+0

Я никогда не делал такого в своей жизни, и у меня есть пустая голова идей о том, как я это сделаю, раздавить. Поэтому мне нужны некоторые объяснения, как я могу справиться с этим, примеры, источники и более полезные вещи. –

ответ

2

Вы должны определить синтаксис для команды себя. Например, /ban <username> для запрета.

  1. Сначала вы проверяете, начинается ли сообщение с косой черты. Если это так, это команда.
  2. Теперь найдите первое пространство, все после косой черты и перед пространством - это имя команды.
  3. Передайте все после первого пробела в команду. В этом случае имя пользователя. Команда обрабатывает параметры самостоятельно.

Это может выглядеть следующим образом:

$message = '/ban TimWolla'; 
if (substr($message, 0, 1) === '/') { 
    // $message is a command 
    $firstSpace = strpos($message, ' '); 
    $command = substr($message, 1, $firstSpace); 
    $parameters = substr($message, $firstSpace + 1); 

    if (!hasPermission($command)) error('Permission denied'); 

    switch ($command) { 
     case 'ban': 
      ban($parameters); 
     break; 
    } 
} 

В случае, если вы хотите использовать правильную ООП делает каждую команду класса и использовать интерфейс для всех команд требуют соответствующих метод. например:

interface Command { 
    public function setParameters($parameters); 
    public function hasPermission(); 
    public function execute(); 
} 
+0

Это то, что я искал, спасибо. –

0

Все сообщения должны быть посланы сервером.

I.e, если сообщение «Привет, добро пожаловать на канал» - это должно быть интерпретировано как команда MSG на сервере.

У вас должна быть сторона сервера парсера Command, чтобы разобраться с типом сообщения. Например, если сообщение MSG прошло, отправьте его на номер MessageParser. Если передается команда /, отправьте ее на номер CommandParser.

ban команда должна быть в виде:

/ban username 

На уровне стороне сервера вы должны проверить, что пользователь пытается выполнить команду является оператором, если он/она затем выполните поиск имени пользователя-х IP-адрес и добавьте его в черный список на сервере.

+0

Вы, кажется, очень авторитетно о том, как он это делает. Я не уверен, что есть один способ сделать это - это в конечном счете зависит от того, что он решает. – crush

+0

@crush - это несколько способов сделать это. Я сам реализовал такую ​​систему, используя ASP.NET MVC, поэтому я просто предоставляю ответ, основанный на моем опыте. OP свободно реализует его, но он хочет, я пытался указать их в правильном направлении. –