Rumah php教程 PHP源码 PHP+socket推送消息到DDpush服务器

PHP+socket推送消息到DDpush服务器

May 23, 2016 pm 01:07 PM

php代码

<?php
/**
 * 用Socket向DDpush服务器发送消息
 * 
 * @author Wang Wenbing<binny_w@qq.com>
 */
class DDpusher {
    /* Socket resource */
    private $socket = null;
    
    /**
     * 构造函数
     * @param string $strHost
     * @param int $intPort
     * @throws Exception
     */
    public function __construct($strHost, $intPort = 9999) {
        $strHost = strval($strHost);
        $intPort = intval($intPort);
        if (empty($strHost) || !$intPort) {
            throw new Exception('Wrong strHost or Wrong intPort');
        } elseif (($this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
            throw new Exception('Error at socket_create(): ' . socket_strerror(socket_last_error()));
        } elseif (socket_connect($this->socket, $strHost, $intPort) === false) {
            throw new Exception('Error at socket_connect(): ' . socket_strerror(socket_last_error()));
        }
    }
    
    /**
     * 生成32位的UUID,可以重写此函数
     * @param string $strUser
     * @return string(32)
     */
    private function getUUID($strUser) {
        $strUser = trim($strUser);
        return strlen($strUser) ? md5($strUser) : false;
    }

    /**
     * 检查Version和Appid参数
     * @param int $intVersion
     * @param int $intAppid
     * @return boolen
     */
    private function checkVersionAndAppid($intVersion, $intAppid) {
        return ($intVersion > 0 && $intVersion < 256 && $intAppid > 0 && $intAppid < 256);
    }
    
    /**
     * 发送通知
     * @param string $strUser
     * @return boolean $blnRe
     */
    public function push0x10($strUser, $intVersion = 1, $intAppid = 1) {
        $blnRe = false;
        $intVersion = intval($intVersion);
        $intAppid = intval($intAppid);
        if ($this->checkVersionAndAppid($intVersion, $intAppid) && ($strUUID = $this->getUUID($strUser)) !== false && $this->socket) {
            $strBin = pack('CCCH32n', $intVersion, $intAppid, 16, $strUUID, 0);
            socket_write($this->socket, $strBin, strlen($strBin)) && $blnRe = (bindec(socket_read($this->socket, 1)) == 0);
        } else {
            throw new Exception('Error at push0x10()');
        }
        return $blnRe;
    }
    
    /**
     * 发送分类信息
     * @param string $strUser
     * @param string $strHex 16位长的16进制字符
     * @param int $intVersion
     * @param int $intAppid
     * @return boolen $blnRe
     */
    public function push0x11($strUser, $strHex, $intVersion = 1, $intAppid = 1) {
        $blnRe = false;
        $intVersion = intval($intVersion);
        $intAppid = intval($intAppid);
        $strHex = trim($strHex);
        if ($this->checkVersionAndAppid($intVersion, $intAppid) && ($strUUID = $this->getUUID($strUser)) !== false && $this->socket && strlen($strHex) == 16) {
            $strBin = pack('CCCH32nH16', $intVersion, $intAppid, 17, $strUUID, 8, $strHex);
            socket_write($this->socket, $strBin, strlen($strBin)) && $blnRe = (bindec(socket_read($this->socket, 1)) == 0);
        } else {
            throw new Exception('Error at push0x11()');
        }
        return $blnRe;
    }
    
    /**
     * 发送500字节以内的字符消息
     * @param string $strUser
     * @param string $strMsg 必须是utf8编码的字符
     * @param int $intVersion
     * @param int $intAppid
     * @return boolen $blnRe
     * @throws Exception
     */
    public function push0x20($strUser, $strMsg, $intVersion = 1, $intAppid = 1) {
        $blnRe = false;
        $intVersion = intval($intVersion);
        $intAppid = intval($intAppid);
        // $strMsg = mb_convert_encoding($strMsg, 'utf8', 'gbk');
        $strMsg = trim($strMsg);
        $intLen = strlen($strMsg);
        $blnTemp = ($intLen > 0 && $intLen <= 500);
        if ($this->checkVersionAndAppid($intVersion, $intAppid) && ($strUUID = $this->getUUID($strUser)) !== false && $this->socket && $blnTemp) {
            $strBin = pack('CCCH32nA' . $intLen, $intVersion, $intAppid, 32, $strUUID, $intLen, $strMsg);
            socket_write($this->socket, $strBin, strlen($strBin)) && $blnRe = (bindec(socket_read($this->socket, 1)) == 0);
        } else {
            throw new Exception('Error at push0x20()');
        }
        return $blnRe;
    }
    
    /**
     * 断开连接
     */
    public function __destruct() {
        if ($this->socket) {
            socket_close($this->socket);
            $this->socket = null;
        }
    }
    
}

/**
 * 使用Demo
 */
try {
    $obj = new DDpusher('172.16.14.7');
    $obj->push0x10('user01') && print('通知已发送<br />');
    $obj->push0x11('user01', '0000000000000001') && print('分类已发送<br />');
    $obj->push0x20('user01', '我爱你DDpush') && print('字符串消息已发送<br />');
} catch (Exception $ex) {
    echo $ex->getMessage();
}
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)