body = rand(1,100000000); fwrite($sock, $buf->getBuffer()); $ret = fread($sock, 1024); $ret = GameBuffer::decode($ret); if(isset($ret['to_uid'])) { echo "chart room login success , your uid is [{$ret['to_uid']}]\n"; echo "use uid:words send message to one user\n"; echo "use words send message to all\n"; } stream_set_blocking($sock, 0); stream_set_blocking(STDIN, 0); $read = array(STDIN, $sock); $write = $ex = array(); while(1) { $read_copy = $read; if($ret = stream_select($read_copy, $write, $ex, 1000)) { foreach($read as $fd) { // 接收消息 if((int)$fd === (int)$sock) { $ret = fread($fd, 102400); if(!$ret){continue;exit("connection closed\n ");} $ret = GameBuffer::decode($ret); echo $ret['from_uid'] , ':', $ret['body'], "\n"; continue; } // 向某个uid发送消息 格式为 uid:xxxxxxxx $ret = fgets(STDIN, 10240); if(!$ret)continue; if(preg_match("/(\d+):(.*)/", $ret, $match)) { $uid = $match[1]; $words = $match[2]; $buf = new GameBuffer(); $buf->header['cmd'] = GameBuffer::CMD_USER; $buf->header['sub_cmd'] = GameBuffer::SCMD_SAY; $buf->header['to_uid'] = $uid; $buf->body = $words; fwrite($sock, $buf->getBuffer()); continue; } // 向所有用户发消息 $buf = new GameBuffer(); $buf->header['cmd'] = GameBuffer::CMD_USER; $buf->header['sub_cmd'] = GameBuffer::SCMD_BROADCAST; $buf->body = trim($ret); fwrite($sock, $buf->getBuffer()); continue; } } }