cmd) {
case CmdCode::cmd_user_friend_search: # [6110]查找好友
return FriendProc::SearchFriend($req);
case CmdCode::cmd_user_friend_suggestList: # [6111]添加好友界面获取一批推荐好友列表
return FriendProc::GetSuggestList($req);
case CmdCode::cmd_user_friend_get_list: # [6106]获取好友列表 ok下发好友个人公会信息
return FriendProc::getAppFriends($req);
case CmdCode::cmd_user_friend_get_infos: # [6107]获取详细信息
return FriendProc::getAppFriendInfos($req);
// ------------------------------------------
case CmdCode::cmd_user_friend_gift_getlist: # [6113]拉取好友赠送礼物的记录
return FriendProc::getAppFriendGiftList($req);
case CmdCode::cmd_user_friend_gift_redraw: # [6114]领取好友赠送的礼物[并回赠]
return FriendProc::getAppFriendGift($req);
case CmdCode::cmd_user_friend_gift_send: # [6115]向好友发送礼物,示好
return FriendProc::sendGiftToAppFriend($req);
case CmdCode::cmd_user_friend_unduckmsg:
return FriendProc::CheckUnduckMessage($req);
//--------------------------------------------
case CmdCode::cmd_user_friend_apply: # [6101]加好友
return FriendProc::ApplyToAddNewFriend($req);
case CmdCode::cmd_user_friend_accept: # [6102]接受好友请求
return FriendProc::Accept($req);
case CmdCode::cmd_user_friend_deny: # [6103]拒绝好友请求
return FriendProc::Deny($req);
case CmdCode::cmd_user_friend_remove: # [6104]删除好友
return FriendProc::Remove($req);
case CmdCode::cmd_user_friend_getapplylist: # [6105]好友请求列表
return FriendProc::GetApplyList($req);
//-----------------------------------------------
case CmdCode::cmd_user_friend_leave_message: # [6108]给好友发消息
return FriendProc::SendMessage($req);
case CmdCode::cmd_user_friend_get_message: # [6109]刷新消息
return FriendProc::GetNewMessage($req);
//-----------------------------------------------
case CmdCode::cmd_user_friend_reload: # [6112]更新好友
return FriendProc::Reload($req);
case CmdCode::cmd_user_friend_LookGuildInfo: # [6117]查看好友所在部落信息
return FriendProc::LookGuildInfo($req);
case CmdCode::cmd_user_friend_LookFriendInfo: # [6118]查看好友简介
return FriendProc::LookFriendInfo($req);
default:
return Resp::err(ErrCode::cmd_err);
}
}
/**
* 查看好友的部落信息
* @param type $req
*/
static function LookGuildInfo($req) {
$zoneid = $req->zoneid;
$friendId = $req->paras[0];
$mem = $req->mem;
$sql = "select * from `tab_rolename` where userID = '$friendId'";
$paydb = CPayInit();
$rows = $paydb->fetch_array($sql);
if (count($rows) == 0) {
$resp = Resp::err(ErrCode::err_user_no);
} else {
$friendGuildInfo = GuildProc::getMemUserGuildInfo($mem, $friendId, $zoneid);
if ($friendGuildInfo == null && $friendGuildInfo->guildId < 0) {
$resp = Resp::err(ErrCode::err_guild_userguildinfono);
} else {
$guildInfo = GuildProc::getMemGuildInfo($mem, $friendGuildInfo->guildId, $zoneid);
if ($guildInfo == null) { # 找不到公会
$resp = Resp::err(ErrCode::err_guild_guildinfono);
} else {
$resp = Resp::ok($guildInfo);
}
}
}
return $resp;
}
/**
* 查看好友简介
* @param type $req
*/
static function LookFriendInfo($req) {
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid = $req->uid;
$friendId = $req->paras[0]; //好友id
$sql = "select * from `tab_rolename` where userID = '$friendId'";
$paydb = CPayInit();
$rows = $paydb->fetch_array($sql);
if (count($rows) == 0) {
$resp = Resp::err(ErrCode::err_user_no);
} else {
$friendInfo = self::initfriendInfo($mem, $rows[0]['userID'], $rows[0]['zoneid']);
if ($friendInfo == null) {
$resp = Resp::err(ErrCode::err_user_no);
} else {
$friendInfo->fightPower = GuildProc::initFightTeamInfo($mem, $rows[0]['userID'], $rows[0]['zoneid']);
$resp = Resp::ok(array(
"friendInfo" => $friendInfo,
));
}
}
return $resp;
}
/**
* 检查玩家的好友信息是否有未处理的
* @param type $req
*/
public static function CheckUnduckMessage($req) {
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid = $req->uid;
$result = -1;
// 别人的赠送列表
$fgiftlist = self::getOps($mem, $uid, $zoneid, enum_Friend_op::gift);
if (count((array) $fgiftlist) <= 0) {
$result = 0;
} else {
foreach ($fgiftlist as $key => $value) {
if (count((array) $value) <= 0) {
continue;
} else {
$result = 1;
break;
}
}
}
//找别人发来的申请加好友的列表
if ($result == 0) {
$ret = FriendProc::getOps($req->mem, $req->uid, $req->zoneid, enum_Friend_op::apply);
$result = (count((array) $ret) > 0) ? 1 : 0;
}
return Resp::ok(array('ret' => $result));
}
/**
* [6112] 核算好友的离线操作
* @param Req $req
*/
public static function Reload($req) {
$mem = $req->mem;
$uid = $req->uid;
$zoneid = $req->zoneid;
// 刷新接受请求列表, 将已接受的好友添加到
$allOps = self::getOps($mem, $uid, $zoneid);
$op = new enum_Friend_op(enum_Friend_op::accepted);
$ops = $allOps->$op;
if (count($ops) > 0) {
foreach ($ops as $u => $ts) { # 立即将对方添加到好友列表
self::_AddFriend($mem, $uid, $zoneid, $u);
}
$ops = "{}";
$allOps->$op = $ops;
}
// 刷新删除列表, 看谁和我解除了好友关系, 删掉他
$op = new enum_Friend_op(enum_Friend_op::remove);
$ops = $allOps->$op;
if (count($ops) > 0) {
foreach ($ops as $u => $ts) {
self::_RemoveFriend($mem, $uid, $zoneid, $u);
}
$allOps->$op = "{}";
}
$g = glc();
self::filterOutDateRecords($allOps, # # 清理过期的请求记录,
new enum_Friend_op(enum_Friend_op::applied), $g->User_Friends_Apply_ExpireTs);
self::filterOutDateRecords($allOps, # # 刷新别人发来的好友请求列表, 过期而没有处理的也删掉(莫名其妙的消失,玩家会不会不爽?要不要加上倒计时?).
new enum_Friend_op(enum_Friend_op::apply), $g->User_Friends_Apply_ExpireTs);
self::saveOps($mem, $uid, $zoneid, $allOps, 0); # 回存数据
// 清理过期的互动记录, 不清除, 一个好友最多保留3条记录
// 更新好友数量
return Resp::ok(array("ret" => "ok"));
}
private static function filterOutDateRecords($allOps, $op, $outts) {
$ops = $allOps->$op;
if (count((array) $ops) > 0) {
$ops = array_filter((array) $ops, function ($ts)use($outts) {
return (intval($ts) + $outts) > now();
});
$allOps->$op = (is_null($ops) || 0 == count((array) $ops)) ? "{}" : $ops;
}
}
//
//
//
/**
* [6108]发送消息/留言
* @param Req $req
*/
public static function SendMessage($req) {
// todo:检查是否好友
$mem = $req->mem;
$uid_from = $req->uid;
$uid_to = $req->paras[0];
$msg = $req->paras[1];
if (strlen($msg) > self::MaxMessageLength) {
$msg = substr($msg, 0, self::MaxMessageLength) . "...";
}
$key = MemKey_User::FriendsMsgQueue_hash($req->zoneid, $uid_to);
$arr = $mem->hget($key, $uid_from);
if (null == $arr) {
$arr = ArrayInit();
}
$ts = now();
array_push($arr, "{$msg}{$ts}");
if (count($arr) > glc()->User_Friends_MessageCount_Max) {
array_shift($arr);
}
$mem->hset($key, $uid_from, $arr);
//
$mts = isset($req->paras[2]) ? $req->paras[2] : 0;
$newmsg = self::_GetNewMessage($mem, $req->zoneid, $uid_from, $uid_to, $mts);
return Resp::ok(array("ret" => "ok", 'newmsg' => $newmsg));
}
/**
* [6109]拉取最新消息/留言
*
* @param Req $req
*/
public static function GetNewMessage($req) {
if (count($req->paras) < 2) {
return Resp::err(ErrCode::parasnotenough_msg);
}
$uid_filter = $req->paras[0];
$ts = $req->paras[1];
$arr = self::_GetNewMessage($req->mem, $req->zoneid, $req->uid, $uid_filter, $ts);
return Resp::ok($arr);
}
/**
* 取留言消息
* @param CredisUtil $mem
* @param int $zoneid
* @param string $uid
* @param string $f_uid
* @param ts $ts
* @return asoc_array
*/
private static function _GetNewMessage($mem, $zoneid, $uid, $f_uid, $ts) {
$key = MemKey_User::FriendsMsgQueue_hash($zoneid, $uid);
$arr = array($f_uid => $mem->hget($key, $f_uid));
// 依据ts时间戳,剔除客户端不需要的消息,然后传送.
foreach ($arr as &$msgq) {
if (null == $msgq) { // 防御
continue;
}
$msgq = array_filter($msgq, function($msg) use($ts) {
return $ts < substr($msg, -10); // 时间戳10位
});
}
return $arr;
}
//
//
//
//
//
//
/**
* 设置默认同意好友请求
* @param Req $req
*/
public static function SetAutoAccept($req) {
}
//
//
//
//
/**
* [6105] 拉取好友请求列表
* @param Req $req
*/
public static function GetApplyList($req) {
$ret = FriendProc::getOps($req->mem, $req->uid, $req->zoneid, enum_Friend_op::apply);
return Resp::ok(array("ret" => (count((array) $ret) > 0) ? $ret : array()));
}
/**
* [6101]添加好友
* @param Req $req
*/
public static function ApplyToAddNewFriend($req) { // 取目标玩家的ops列表插入请求
$mem = $req->mem;
$uid_to = $req->paras[0];
$uid_from = $req->uid;
if ($uid_from == $uid_to) {
return Resp::err(ErrCode::paras_err, "添加的好友ID非法!");
}
$err = self::AddOp($mem, $req->zoneid, $uid_to, enum_Friend_op::apply, $uid_from);
if (ErrCode::ok != $err) {
return Resp::err($err);
}
$err = self::AddOp($mem, $req->zoneid, $req->uid, enum_Friend_op::applied, $uid_to);
if (ErrCode::ok != $err) {
return Resp::err($err);
}
return Resp::ok(array("ret" => "ok"));
}
/**
* [6102]接受好友请求
* @param Req $req
*/
public static function Accept($req) { // 将对方立即放到自己的好友列表中, 并给对方发送接受的op, 删除请求记录
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid_my = $req->uid;
$uid_arr = explode(',', $req->paras[0]);
foreach ($uid_arr as $uid_to) {
$myOp = self::getOps($mem, $req->uid, $zoneid, enum_Friend_op::apply); // 自己的请求列表
unset($myOp->$uid_to); // 删除请求记录
self::saveOps($mem, $req->uid, $zoneid, $myOp, enum_Friend_op::apply); // 更新自己的请求列表
$err = self::AddOp($mem, $zoneid, $uid_to, enum_Friend_op::accepted, $uid_my); // 向对方的已接受列表中添加记录
if ($err != ErrCode::ok) { // 出错
return Resp::err($err);
}
self::_AddFriend($mem, $uid_my, $zoneid, $uid_to);
// $mem->sadd(MemKey_User::FriendsList_set($zoneid, $req->uid), $uid_to); // 立即将对方添加到好友列表
}
return Resp::ok(array("ret" => "ok"));
}
/**
* [6103]拒接好友请求
* @param Req $req
*/
public static function Deny($req) { // 直接 删除请求记录, 不通知对方了
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid_my = $req->uid;
$uid_to = $req->paras[0];
// 从自己的列表中删除就行了,不用通知对方
$myOp = self::getOps($mem, $uid_my, $zoneid, enum_Friend_op::apply); // 自己的请求列表
unset($myOp->$uid_to);
self::saveOps($mem, $uid_my, $zoneid, $myOp, enum_Friend_op::apply); // 更新自己的请求列表
return Resp::ok(array("ret" => "ok"));
}
/**
* [6104]删除好友
* @param Req $req
*/
public static function Remove($req) {// 将对方立即从自己的好友列表中删除, 并给对方发送remove的op
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid_to = $req->paras[0]; // 删除谁
$uid_my = $req->uid;
$tOp = self::getOps($mem, $uid_to, $zoneid, enum_Friend_op::remove); // 对方的删除列表
$ts = now();
$userInfo_my = UserProc::getUserInfo($mem, $zoneid, $uid_my);
$name = $userInfo_my->game->name;
$tOp->$uid_my = $ts . "_" . $name;
self::saveOps($mem, $uid_to, $zoneid, $tOp, enum_Friend_op::remove); // 更新对方的删除列表
self::_RemoveFriend($mem, $uid_my, $zoneid, $uid_to);
return Resp::ok(array("ret" => "ok"));
}
//
//
//
//
/**
* [6110]搜索好友
* @param Req $req
*/
static function SearchFriend($req) {
//客户端参数解析
if (count($req->paras) <= 1) { // 参数非法
return Resp::err(ErrCode::parasnotenough_msg);
}
$zoneid = $req->zoneid;
$filter = $req->paras[0];
$start = 0;
if (count($req->paras) > 1) {
$start = $req->paras[1];
}
$max = 8; // 每次查询返回的数据条目数量
$sql = "select * from `tab_rolename` where (`userID`='$filter' OR `roleName` like '%$filter%') and zoneid = $zoneid limit $start, $max ;";
$paydb = CPayInit();
$rows = $paydb->fetch_array($sql);
$ret = ArrayInit();
foreach ($rows as $row) {
$uid = $row['userID'];
$zone_all = $row['zoneid'];
if ($uid == $req->uid) {
continue;
}
$friendInfo = self::initfriendInfo($req->mem, $uid, $zone_all);
if ($friendInfo != null) {
$ret[] = $friendInfo;
}
}
$ops = self::getOps($req->mem, $req->uid, $req->zoneid, enum_Friend_op::applied);
return Resp::ok(array('fList' => $ret, 'applied' => $ops));
}
static function initfriendInfo($mem, $uid, $zoneid) {
$userInfo = UserProc::getUserInfo($mem, $zoneid, $uid);
if ($userInfo == null) {
return null;
}
$userGuildInfo = GuildProc::getMemUserGuildInfo($mem, $uid, $zoneid);
if ($userGuildInfo == null) {
$userGuildInfo = ObjectInit();
$userGuildInfo->guildName = "";
$userGuildInfo->guildId = 0;
}
$key_cur = MemKey_GameRun::Game_PVPScoreByZone_zset($zoneid);
$score = $mem->zscore($key_cur, $uid);
$userGuildInfo->cupScore = $score == null ? 0 : $score;
$friendObj = new initfriendInfoModel(null, $uid, $userInfo->game->name, $userInfo->game->level, $userInfo->game->img, #
$userInfo->game->imgBorderId, $userGuildInfo->guildName, $userGuildInfo->guildId, $userGuildInfo->cupScore);
return $friendObj;
}
/**
* [6111]添加好友界面获取一批推荐好友列表
* @param Req $req
*/
static function GetSuggestList($req) {
//客户端参数解析
if (count($req->paras) < 1) { // 参数非法
return Resp::err(ErrCode::parasnotenough_msg);
}
$zoneid = $req->zoneid;
$start = $req->paras[0]; // 第几页
$max = 8; // 每次查询返回的数据条目数量
$sql = "select * from `tab_rolename` where `zoneid`=$zoneid order by ts desc limit $start, $max ;";
$paydb = CPayInit();
$rows = $paydb->fetch_array($sql);
$arr = ArrayInit();
foreach ($rows as $row) {
if ($row['userID'] == $req->uid) {
continue;
}
unset($row["tid"]);
unset($row["zoneid"]);
$arr[] = $row['userID'];
}
$applidops = self::getOps($req->mem, $req->uid, $req->zoneid, enum_Friend_op::applied);
$ret = array('fList' => array_unique($arr), 'applied' => $applidops);
return Resp::ok($ret);
}
//
//
//
/**
* [6106]获取好友ID列表
* @param Req $req
* @return int
*/
static function getAppFriends($req) {
self::Reload($req);
$mem = $req->mem;
$zoneid = $req->zoneid;
//客户端参数解析
$friendIds = self::_GetFriendList($mem, $req->uid, $zoneid); // 取好友列表
$userArr = ArrayInit();
foreach ($friendIds as $index => $uid) {
$friendInfo = self::initfriendInfo($mem, $uid, $zoneid);
if ($friendInfo == null) {
continue;
}
$userArr[] = $friendInfo;
}
//$mygiftops = self::getOps($mem, $req->uid, $req->zoneid, enum_Friend_op::giftrecord);
$resp = Resp::ok(array(
#"friends" => $friendIds,
'userGuild' => $userArr,
));
return $resp;
}
/**
* 查找好友数量
* @param Req $req
*/
public static function getCurrentFriendsCount($req) {
return $req->mem->scard(MemKey_User::FriendsList_set($req->zoneid, $req->uid));
}
/**
* [6107] 获取好友信息列表
* @param Req $req
* @return type
*/
static function getAppFriendInfos($req) {
$mem = $req->mem;
//客户端参数解析
$zoneid = $req->zoneid;
$fuids = explode(',', $req->paras[0]); // 逗号分割uid字符串
$max = 8; # 一次最多取八个数据
$n = count($fuids);
// var_dump($fuids);
if ($n > 0 && $n <= $max) {
$fuidkeys = array_map(function ($i) use($zoneid) {
return MemKey_User::Info($zoneid, $i);
}, $fuids);
$arr = $mem->getMulti($fuidkeys);
$friendInfos = ArrayInit();
$n = 0;
foreach ($arr as $userInfo) {
isEditor() && $userInfo = new UserGameModel;
isEditor() && $shareInfo = new UserHeroModel;
$uid = $fuids[$n++];
if (!$userInfo # 玩家数据不为空
|| !property_exists($userInfo, 'heros') # 存在heros数据
|| !$userInfo->heros) { # heros数据不为空
continue;
}
$sharedHeroId = $userInfo->heros->firendSupportHeroUID;
if ($sharedHeroId) {
$shareInfo = $userInfo->heros->collectHeros->$sharedHeroId;
} else { // todo: 暂定如果没有设置共享英雄,默认取集合中第一个英雄, 征询策划是否修订规则
$coll = $userInfo->heros->collectHeros;
$keys = array_keys((array) $coll);
if (count($keys) <= 0) {
continue;
}
$sharedHeroId = $keys[0];
$shareInfo = $userInfo->heros->collectHeros->$sharedHeroId;
}
// 额外将英雄的装备数据替换为实例数据
self::getArmor($userInfo, $shareInfo, 'weapon');
self::getArmor($userInfo, $shareInfo, 'armor');
self::getArmor($userInfo, $shareInfo, 'ring');
$friendInfos[$uid] = array('sharedHero' => $shareInfo,
'lastLoginTs' => isset($userInfo->lastLogin) ? $userInfo->lastLogin : 0,
'level' => $userInfo->level,
'nickname' => $userInfo->name
);
}
if (count($friendInfos) <= 0) {
$friendInfos = null;
}
$resp = Resp::ok(array('ret' => $friendInfos));
} else {
$resp = Resp::err(ErrCode::paras_err);
}
return $resp;
}
static function getArmor($userInfo, $hero, $armor) {
$armorid = $hero->equip->$armor->itemuid;
if ($armorid > 0 && isset($userInfo->store->equipment->$armorid)) {
$hero->equip->$armor = $userInfo->store->equipment->$armorid;
} else {
$hero->equip->$armor = null;
}
}
//
//
//
//
/**
* [6115]向好友发送礼物(示好)
* @param Req $req
*/
static function sendGiftToAppFriend($req) {
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid = $req->uid;
//客户端参数解析
$fuids = explode(',', $req->paras[0]); // 逗号分割的uid数组
// $pr = $req->paras[1]; // other参数 preserved
$n = count($fuids);
if ($n <= 0) {
return Resp::ok(array("ret" => 0));
}
$mygiftrecord = self::getOps($mem, $uid, $zoneid, enum_Friend_op::giftrecord);
$m = 0;
for ($i = 0; $i < $n; $i++) {
$fid = $fuids[$i];
$tsDay = tsDay();
if (property_exists($mygiftrecord, $fid) // 判断对方是否能够领取礼物(当天已经发送过,则不再发送)
&& $mygiftrecord->$fid >= $tsDay) {
continue;
}
$mygiftrecord->$fid = $tsDay; # 更新发送记录
$fgiftinfo = self::getOps($mem, $fid, $zoneid, enum_Friend_op::gift);
if (null == $fgiftinfo) { // 防御
$fgiftinfo = ObjectInit(); // 没找到好友数据, 则创建
}
// 给对方身上插入操作记录
if (!isset($fgiftinfo->$uid) or ! is_array($fgiftinfo->$uid)) {//防御
$fgiftinfo->$uid = ArrayInit();
}
$arr = $fgiftinfo->$uid;
$arr[] = tsDay();
if (count($arr) > 3) { // 最多保留3条记录
sort($arr);
array_shift($arr);
}
$fgiftinfo->$uid = $arr; // 更新下
self::saveOps($mem, $fid, $zoneid, $fgiftinfo, enum_Friend_op::gift);
$m++;
}
// 回存数据
self::saveOps($mem, $uid, $zoneid, $mygiftrecord, enum_Friend_op::giftrecord);
// 其他检查比如任务、成就系统
// ...
// 返回结果
return Resp::ok(array("ret" => $m));
}
/**
* [6113]查询游戏中哪些好友给我发送了礼物的列表
* @param Req $req
*/
static function getAppFriendGiftList($req) {
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid = $req->uid;
// 别人的赠送列表
$fgiftlist = self::getOps($mem, $uid, $zoneid, enum_Friend_op::gift);
if (count((array) $fgiftlist) <= 0) {
$fgiftlist = NULL;
}
return Resp::ok(array('ret' => $fgiftlist));
}
/**
* [6114]领取来自好友的礼物[并回赠]
* @param Req $req
*/
static function getAppFriendGift($req) {
$mem = $req->mem;
$zoneid = $req->zoneid;
$uid = $req->uid;
//客户端参数解析
$fuids = explode(',', $req->paras[0]); // 逗号分割的uidtsday数组
$bSendback = true; // 是否回赠
$arr = array();
array_map(function($f)use(&$arr) {
$arr[substr($f, -5)] = substr($f, 0, -5); // tsday()占5个字符
}, $fuids);
$fgiftlist = self::getOps($mem, $uid, $zoneid, enum_Friend_op::gift);
$recieved = 0;
foreach ($arr as $ts => $fid) {
if (isset($fgiftlist->$fid) && in_array($ts, $fgiftlist->$fid)) {
StlUtil::arrayRemove($fgiftlist->$fid, $ts);
$recieved++;
}
}
$req->userInfo->game->friendPoint += $recieved;
self::saveOps($mem, $uid, $zoneid, $fgiftlist, enum_Friend_op::gift);
UserProc::updateUserInfo($req);
if ($bSendback && $recieved > 0) {
$uids_send = array_unique(array_values($arr));
$req->paras[0] = implode(',', $uids_send);
// var_dump($uids_send);
self::sendGiftToAppFriend($req);
}
// 当天领取好友礼物有没有上限? 比如100个心.
// 检查是否存在对应的礼物记录,
// 发送礼物
// 删除礼物记录
// 回写数据
// 返回值
return Resp::ok(array("ret" => $recieved));
}
/**
* 玩家初始化
* @param Req $req
*/
static function Init($req) {
$mem = $req->mem;
$z = $req->zoneid;
$uid = $req->uid;
// $mem->sadd(MemKey_User::FriendsList_set($z, $uid), "");
$mem->hset(MemKey_User::FriendsMsgQueue_hash($z, $uid), "sys", "");
$mem->hmset(MemKey_User::FriendsOps_hash($z, $uid), array("apply" => "{}",
"applied" => "{}",
"gift" => "{}",
"accepted" => "{}",
"remove" => "{}",
'giftrecord' => "{}"));
}
//
//
//
//-------------以下是辅助方法-----------------
//
/**
* 验证是否好友
* @param Req $req
*/
public static function isFriendship($zoneid, $myUid, $fUid) {
return gMem()->sismember(MemKey_User::FriendsList_set($zoneid, $myUid), $fUid);
}
/**
* 添加fuid到好友列表
*/
private static function _AddFriend($mem, $uid, $zoneid, $fuid) {
$mem->sadd(MemKey_User::FriendsList_set($zoneid, $uid), $fuid);
}
/**
* 从好友列表中删除fuid
*/
private static function _RemoveFriend($mem, $uid, $zoneid, $fuid) {
$mem->sremove(MemKey_User::FriendsList_set($zoneid, $uid), $fuid);
}
private static function _GetFriendList($mem, $uid, $zoneid) {
$arr = $mem->smembers(MemKey_User::FriendsList_set($zoneid, $uid));
if (!$arr) { # 数据为空
$arr = ArrayInit();
}
$friendIds = array_values(array_filter($arr, function ($a) {
return $a != "";
}));
return $friendIds;
}
//
//
/**
* 添加操作
* @param enum_Friend_op $op
* @param Req $req
*/
private static function AddOp($mem, $zoneid, $uid, $op, $uid_from) {
$enop = new enum_Friend_op($op);
if (!$enop->isValidValue($op)) {
return ErrCode::paras_err;
}
$ts = now();
$tOp = FriendProc::getOps($mem, $uid, $zoneid, $op);
$userInfo = UserProc::getUserInfo($mem, $zoneid, $uid_from);
$userName = $userInfo->game->name;
$tOp->$uid_from = $ts . "_" . $userName; # 可以按照时间戳排序
return FriendProc::saveOps($mem, $uid, $zoneid, $tOp, $op);
}
/**
* 查询好友异步操作队列
* @param CRedisUtil $mem
* @param string $uid
* @param int $zoneid
* @param enum_Friend_op $op
* @return mixed
*/
private static function getOps($mem, $uid, $zoneid, $op = 0) {
$ret = ObjectInit();
if ($op == enum_Friend_op::__default) {
$ret = $mem->hgetall(MemKey_User::FriendsOps_hash($zoneid, $uid));
} else {
$ret = $mem->hget(MemKey_User::FriendsOps_hash($zoneid, $uid), new enum_Friend_op($op));
}
if (is_null($ret)) {
$ret = ObjectInit();
}
return $ret;
}
/**
* 回写好友异步操作队列
* @param CRedisUtil $mem
* @param string $uid
* @param int $zoneid
* @param mixed $data
* @param int $op
*/
private static function saveOps($mem, $uid, $zoneid, $data, $op) {
$enop = new enum_Friend_op($op);
if (!$enop->isValidValue($op)) {
return ErrCode::paras_err;
}
if ($op == enum_Friend_op::__default) { # 全部数据
$mem->hmset(MemKey_User::FriendsOps_hash($zoneid, $uid), $data);
} else {
if (is_array($data) && count($data) == 0) {
$data = "{}";
}
$mem->hset(MemKey_User::FriendsOps_hash($zoneid, $uid), $enop, $data);
}
return ErrCode::ok;
}
//
// //
//
}
class initfriendInfoModel extends Object_ext {
public $uid;
public $name;
public $level;
public $img;
public $imgBorderId;
public $guildName;
public $guildId;
public $cupScore;
function __construct($tag, $uid, $name, $level, $img, $imgBorderId, $guildName, $guildId, $cupScore) {
if (1 == func_num_args() && $tag) { # 默认的Object初始化方法
parent::__construct($tag);
} else {
$this->uid = $uid;
$this->name = $name;
$this->level = $level;
$this->img = $img;
$this->imgBorderId = $imgBorderId;
$this->guildName = $guildName;
$this->guildId = $guildId;
$this->cupScore = $cupScore;
}
}
}