public function dispatchReceivePacket(Packet $packet, Session $session) { if ($session->isAuth()) { return true; } /* @var \jegarn\session\SwooleSession $session * @var AuthPacket $pkt */ if ($pkt = AuthPacket::getPacketFromPacket($packet)) { if ($pkt->auth()) { $session->setUserId($pkt->getUid()); $session->setAuth(true); $session->setSessionId(TextUtil::generateGUID()); SessionManager::getInstance()->addSession($session); $pkt->setStatus(AuthPacket::STATUS_AUTH_SUCCESS); } else { $pkt->setStatus(AuthPacket::STATUS_AUTH_FAILED); Logger::addInfo('auth failed(fd:' . $session->getFd() . ')'); } } else { $pkt = new AuthPacket(); $pkt->setPacket($packet); $pkt->setStatus(AuthPacket::STATUS_NEED_AUTH); Logger::addInfo('auth needed(fd:' . $session->getFd() . ')'); } ServerManager::getInstance()->send($session, $pkt->getReversedPacket()); return false; }
public function dispatchReceivePacket(Packet $packet, Session $session) { if (!$session->isAuth()) { return; } /* @var \jegarn\session\SwooleSession $session * @var GroupChatPacket $pkt */ if ($pkt = ChatroomPacket::getPacketFromPacket($packet)) { // check send user is a member of this group $cm = ChatroomManager::getInstance(); if ($packet->isFromSystemUser() || $cm->isGroupUser($pkt->getGroupId(), $pkt->getFrom())) { $fromUid = $pkt->getFrom(); if ($uidList = $cm->getGroupUsers($pkt->getGroupId())) { $sm = ServerManager::getInstance(); foreach ($uidList as $uid) { if ($uid != $fromUid) { $pktCopy = clone $pkt; $pktCopy->setTo($uid); if ($toSession = SessionManager::getInstance()->getSessionByUserId($uid)) { Logger::addInfo('user online,chatroom(uid:' . $uid . ')'); $sm->send($toSession, $pktCopy); } else { Logger::addInfo('user not online,chatroom,abandon message(uid:' . $uid . ')'); } } } } else { Logger::addInfo('chatroom ' . $pkt->getGroupId() . ' users lost, from uid ' . $pkt->getFrom()); } } else { Logger::addInfo('chatroom ' . $pkt->getGroupId() . ' has no user ' . $pkt->getFrom() . ' and it is not a system user'); } } }
public function dispatchSendPacket(Packet $packet, Session $toUserSession) { /* @var \jegarn\session\SwooleSession $toSession * @var GroupChatPacket $pkt */ if ($pkt = GroupChatPacket::getPacketFromPacket($packet)) { if (!$toUserSession->isReachable() || !$toUserSession->isAuth()) { OfflineGroupMessageManager::getInstance()->addPacket($packet->getTo(), $pkt); } } }
public function dispatchSendPacket(Packet $packet, Session $toUserSession) { /* @var \jegarn\session\SwooleSession $toSession * @var ChatPacket $pkt */ if ($pkt = NotificationPacket::getPacketFromPacket($packet)) { // user connection is lost, but session is stay, session test user online but socket not available, so save the packet if (!$toUserSession->isReachable() || !$toUserSession->isAuth()) { OfflineNotificationMessageManager::getInstance()->addPacket($packet->getTo(), $pkt); } } }