mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-16 22:34:41 +01:00
Implement friends list
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendAddAgree.FriendAddAgreeReq;
|
||||
import emu.nebula.proto.FriendAddAgree.FriendAddAgreeResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_add_agree_req)
|
||||
public class HandlerFriendAddAgreeReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = FriendAddAgreeReq.parseFrom(message);
|
||||
|
||||
// Handle friend request
|
||||
var target = session.getPlayer().getFriendList().handleFriendRequest((int) req.getUId(), true);
|
||||
|
||||
if (target == null) {
|
||||
return session.encodeMsg(NetMsgId.friend_add_agree_failed_ack);
|
||||
}
|
||||
|
||||
// Build response
|
||||
var rsp = FriendAddAgreeResp.newInstance()
|
||||
.setFriend(target.getFriendProto());
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.friend_add_agree_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendAdd.FriendAddReq;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_add_req)
|
||||
public class HandlerFriendAddReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = FriendAddReq.parseFrom(message);
|
||||
int uid = (int) req.getUId();
|
||||
|
||||
// Send friend request
|
||||
boolean success = session.getPlayer().getFriendList().sendFriendRequest(uid);
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(success ? NetMsgId.friend_add_succeed_ack : NetMsgId.friend_add_failed_ack);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendAllAgree.FriendAllAgreeResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_all_agree_req)
|
||||
public class HandlerFriendAllAgreeReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Agree to all friend requests
|
||||
var results = session.getPlayer().getFriendList().acceptAll();
|
||||
|
||||
// Scuffed way of getting friend data
|
||||
var proto = session.getPlayer().getFriendList().getCachedProto();
|
||||
|
||||
// Build response
|
||||
var rsp = FriendAllAgreeResp.newInstance();
|
||||
|
||||
for (var f : results) {
|
||||
rsp.addFriends(f.getFriendProto());
|
||||
}
|
||||
|
||||
for (var i : proto.getInvites()) {
|
||||
rsp.addInvites(i);
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.friend_all_agree_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendDelete.FriendDeleteReq;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_delete_req)
|
||||
public class HandlerFriendDeleteReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = FriendDeleteReq.parseFrom(message);
|
||||
|
||||
// Delete friend
|
||||
boolean success = session.getPlayer().getFriendList().deleteFriend((int) req.getUId());
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(success ? NetMsgId.friend_delete_succeed_ack : NetMsgId.friend_delete_failed_ack);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendInvitesDelete.FriendInvitesDeleteReq;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_invites_delete_req)
|
||||
public class HandlerFriendInvitesDeleteReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = FriendInvitesDeleteReq.parseFrom(message);
|
||||
|
||||
// Delete all invites
|
||||
for (long uid : req.getMutableUIds()) {
|
||||
session.getPlayer().getFriendList().handleFriendRequest((int) uid, false);
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.friend_invites_delete_succeed_ack);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendListGet.FriendListGetResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@@ -11,8 +10,10 @@ public class HandlerFriendListGetReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
var rsp = FriendListGetResp.newInstance();
|
||||
// Build response
|
||||
var rsp = session.getPlayer().getFriendList().toProto();
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.friend_list_get_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendRecommendationGet.FriendRecommendationGetResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.Nebula;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_recommendation_get_req)
|
||||
public class HandlerFriendRecommendationGetReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Build response
|
||||
var rsp = FriendRecommendationGetResp.newInstance();
|
||||
|
||||
// Get players
|
||||
var players = Nebula.getGameContext().getPlayerModule().getRandomPlayerList(session.getPlayer());
|
||||
|
||||
for (var player : players) {
|
||||
rsp.addFriends(player.getFriendProto());
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.friend_recommendation_get_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.FriendUidSearch.FriendUIdSearchReq;
|
||||
import emu.nebula.proto.FriendUidSearch.FriendUIdSearchResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.Nebula;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.friend_uid_search_req)
|
||||
public class HandlerFriendUidSearchReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = FriendUIdSearchReq.parseFrom(message);
|
||||
int uid = (int) req.getId();
|
||||
|
||||
// Get target player
|
||||
var target = Nebula.getGameContext().getPlayerModule().getPlayer(uid);
|
||||
|
||||
if (target == null) {
|
||||
return session.encodeMsg(NetMsgId.friend_uid_search_failed_ack);
|
||||
}
|
||||
|
||||
// Build response
|
||||
var rsp = FriendUIdSearchResp.newInstance()
|
||||
.setFriend(target.getFriendProto());
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.friend_uid_search_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user