2013-06-20 55 views
0

我一直在开发一个PHP AJAX聊天。 我现在想添加/ ban等命令。PHP AJAX聊天 - 聊天命令的逻辑?

但我不知道我该怎么做。

首先,我希望命令以'/'开头。

我必须首先检查发送的邮件是否以'/'开头,是否正确? 然后看看命令'禁止'是否存在,但它会如何知道,在句子中,用户名将显示在哪里?

我真的很困惑,因为我不知道在哪里以及如何开始。 有没有类似于我的需求的命令系统的开源?

+0

那么如果**你**,你自己定义命令为'/ ban user',这对于解析输入字符串来说非常简单。 – Sebas

+0

你正在开发这个系统,所以这取决于你的工作方式...... – crush

+0

我从来没有在我的生活中做过这样的事情,并且我有一个关于如何做到这一点的想法,Crush。因此,我需要一些关于如何处理它的解释,例子,来源和更多有用的信息。 –

回答

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; 
    } 
} 

在要使用正确的OOP情况下使每个指挥类,并使用一个接口的所有指令要求的正确方法。例如:

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

这就是我一直在寻找的,谢谢。 –

0

所有消息应发送到服务器。

也就是说,如果消息是“您好,欢迎使用该频道” - 这应该被解释为服务器上的MSG命令。

您应该有一个Command解析器服务器端来处理消息的类型。例如,如果MSG消息被传递,请将其发送到MessageParser。如果通过/命令将其发送到CommandParser

一个ban命令应该是形式:

/ban username 

在服务器端水平,你应该检查该用户试图执行的命令是一个经营者,如果他/她,然后查找该用户名的IP地址并将其添加到服务器上的黑名单中。

+0

你对他如何做到这一点似乎很有权威性。我不确定是否有办法做到这一点 - 最终取决于他的决定。 – crush

+0

@crush - 他们是多种方式来做到这一点。我已经使用'ASP.NET MVC'实现了这样一个系统,所以我只是根据我的经验提供了一个答案。无论如何,OP都可以自由实施,但我试图将它们指向正确的方向。 –