Example #1
0
/**
 * 保留每个用户最新的n个最近联系人,到redis中
 */
function storeRecentMembers($data)
{
    if ($data['type'] == \Config\St\Storekey::BROADCAST_MSG_TYPE) {
        return false;
    }
    $chatList = Api\Model\Muser::getChatListFromChatid($data['chatid']);
    foreach ($chatList as $username) {
        RedisModel::zAdd('webChat', $username . \Config\St\Storekey::RECENT_MEMBERS, $data['time'], $data['chatid'], 2592000);
        //删除一个月前的最近联系人
        RedisModel::zRemRangeByScore('webChat', $username . \Config\St\Storekey::RECENT_MEMBERS, 0, $data['time'] - 2592000);
    }
}
Example #2
0
 /**
  * 获取所有在线用户列表 clientid=>name
  */
 public static function getOnlineUsers()
 {
     $key = \Config\St\Storekey::USER_ONLINE_LIST;
     $tryCount = 3;
     while ($tryCount--) {
         $clientList = \Vendors\Redis\RedisModel::hashGet(self::$redisServer, $key);
         if (false === $clientList) {
             $clientList = array();
         } else {
             return $clientList;
         }
     }
     return $clientList;
 }
Example #3
0
 /**
  * 获得队列大小
  */
 public static function lSize($paramArr)
 {
     $options = array('serverName' => '', 'key' => false);
     if (is_array($paramArr)) {
         $options = array_merge($options, $paramArr);
     }
     extract($options);
     if (empty($key) || empty($serverName)) {
         return false;
     }
     $redis = RedisModel::getLink($serverName);
     $data = 0;
     $data = $redis->lSize($key);
     return $data;
 }
Example #4
0
<?php

//test文件,压入数据的时候可以参考
use Workerman\Autoloader;
require_once '../../../Workerman/Autoloader.php';
Autoloader::setRootPath("../../");
//消息队列,向队列中rpush
//require 'Redis.php';
//use \Vendors\RedisQuene\Redisq;
use Vendors\Redis\RedisModel;
//RedisModel::set('webChat', 'aaa', 'bbbbgggggg');
//     RedisModel::hashSet('webChat', 'aaa', 'bbbbgggggg', 'dddd');
//      RedisModel::hashSet('webChat', 'USER_ONLINE_LIST', 'bbbbggg', 'dddd');
// 	$res = RedisModel::hashGet('webChat', 'aaa');
// 	var_dump($res);die;
$res = RedisModel::hashDel('webChat', 'wangjx:unread:msg', 'bbb');
var_dump($res);
die;
if (null === $res) {
    var_dump($res);
} else {
    var_dump(2222222);
}
die;
$a = substr(str_shuffle("qwertyuiopasdfghjklzxcvbnm"), 0, 4);
$b = substr(str_shuffle("qwertyuiopasdfghjklzxcvbnm"), 0, 4);
$messageVal = array('fromuser' => 'cuihb', 'touser' => 'xieyx', 'message' => $a . $b, 'time' => time());
Redisq::rpush(array('serverName' => 'webChat', 'key' => 'chat:message:quene', 'value' => serialize($messageVal)));
$long = Redisq::getSize(array('serverName' => 'webChat', 'key' => 'chat:message:quene'));
var_dump($long);
$arr = Redisq::range(array('serverName' => 'webChat', 'key' => 'chat:message:quene', 'offset' => 0, 'len' => -1));
Example #5
0
 /**
  * 删除最近联系人
  * 给出一个用户名(用户名组)和一个chatid,将属于该用户名下最近联系人为chatid的都删除掉(踢出群)
  */
 public static function remRecentMembers($chatid, $userList)
 {
     if (!is_array($userList)) {
         return false;
     }
     foreach ($userList as $userid) {
         RedisModel::zRem(self::$redisServer, $userid . \Config\St\Storekey::RECENT_MEMBERS, $chatid);
     }
     return true;
 }
Example #6
0
 /**
  * 不允许多用户登录
  * 剔除存储用户
  */
 public static function notAllowMoreClient($clientList, $clientName)
 {
     if (is_array($clientList)) {
         $unsetKey = array_keys($clientList, $clientName);
         if ($unsetKey) {
             Gateway::sendToAll(json_encode(array('type' => 'error', 'info' => 'loginconflict', 'msg' => '您已在另一客户端登陆')), $unsetKey);
             foreach ($unsetKey as $unkey) {
                 unset($clientList[$unkey]);
                 //下线用户
                 Gateway::closeClient($unkey);
                 //删除存储用户
                 RedisModel::hashDel('webChat', Storekey::USER_ONLINE_LIST, $unkey);
             }
         }
     }
     return;
 }
Example #7
0
 /**
  * 用户某路对话的离线消息数加 num 个
  * 每个用户有一个离线hash,hash中的键值分别是每路聊天对应的消息数量
  */
 public static function addUnreadMsg($username, $chatid, $partkey = '', $num = 1)
 {
     return RedisModel::hashIncrBy(self::$redisServer, $username . $partkey, $chatid, $num);
 }