package org.skfiy.typhon.spi.playerevent; import com.alibaba.fastjson.JSON; import org.skfiy.typhon.domain.Friend; import org.skfiy.typhon.domain.Incident; import org.skfiy.typhon.packet.Namespaces; import org.skfiy.typhon.spi.IncidentConstants; import org.skfiy.typhon.spi.IPlayerEvent; import org.skfiy.typhon.spi.RoleProvider; import com.alibaba.fastjson.JSONObject; import java.util.Map; import javax.inject.Inject; import org.skfiy.typhon.domain.Player; import org.skfiy.typhon.repository.IncidentRepository; import org.skfiy.typhon.spi.role.PlayerEventBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FriendPlayerEvent implements IPlayerEvent<PlayerEventBean> { private static final Logger LOG = LoggerFactory.getLogger(FriendPlayerEvent.class); @Inject private RoleProvider roleProvider; @Inject private IncidentRepository incidentReposy; @Override public String getEventName() { return IncidentConstants.EVENT_FRIEND_REQUEST; } @Override public void invoke(PlayerEventBean bean) { Player player = bean.getPlayer(); Incident incident = bean.getIncident(); Friend friend = JSONObject.parseObject(incident.getData(), Friend.class); // 如果已经是好友则不处理 if (player.getNormal().findFriend(friend.getRid()) != null) { LOG.debug("{}: <{}> is friend.", player.getRole().getName(), friend.getName()); incidentReposy.delete(incident.getPid()); return; } if (!(roleProvider.checkFriendLimit(player) && roleProvider.checkFriendLimit(friend .getRid()))) { LOG.debug("{}/{}: friend size limit.", player.getRole().getName(), friend.getName()); incidentReposy.delete(incident.getPid()); return; } if (incident.getCreationTime() + 5 * 24 * 60 * 60 * 1000 <=System.currentTimeMillis()) { LOG.debug("{}/{}:friendRequest is overdue", player.getRole().getName(), friend.getName()); incidentReposy.delete(incident.getPid()); return; } JSONObject result = new JSONObject(); result.put("data", incident.getJSONData()); result.put("pid", incident.getPid()); Map<Integer, Incident> friendMsgMap = roleProvider.getFriendMsgSessionMap(player.getSession()); friendMsgMap.put(incident.getPid(), incident); player.getSession().write(Namespaces.FRIEND_ADD, result); } @Override public boolean isDeletable() { return false; } }