add sending image method

This commit is contained in:
NetRiceCake
2025-12-02 18:00:46 +09:00
parent 0558360bed
commit 850298763f
38 changed files with 504 additions and 155 deletions

View File

@@ -5,10 +5,18 @@ import com.github.netricecake.kakao.structs.Member;
import com.github.netricecake.kakao.structs.Message;
import com.github.netricecake.loco.LocoPacket;
import com.github.netricecake.loco.LocoSocektHandler;
import com.github.netricecake.loco.packet.inbound.*;
import com.github.netricecake.loco.packet.outbound.ChatInfoOut;
import com.github.netricecake.loco.packet.outbound.InfoLinkOut;
import com.github.netricecake.loco.packet.outbound.MessageOut;
import com.github.netricecake.loco.packet.inbound.member.DelMemIn;
import com.github.netricecake.loco.packet.inbound.member.MemberIn;
import com.github.netricecake.loco.packet.inbound.member.NewMemIn;
import com.github.netricecake.loco.packet.inbound.member.SyncLinkPfIn;
import com.github.netricecake.loco.packet.inbound.message.MessageIn;
import com.github.netricecake.loco.packet.inbound.room.ChatInfoIn;
import com.github.netricecake.loco.packet.inbound.room.InfoLinkIn;
import com.github.netricecake.loco.packet.outbound.member.MemberOut;
import com.github.netricecake.loco.packet.outbound.room.ChatInfoOut;
import com.github.netricecake.loco.packet.outbound.room.InfoLinkOut;
import com.github.netricecake.loco.packet.outbound.message.MessageOut;
import com.google.gson.JsonArray;
import lombok.Getter;
public class LocoSocketHandlerImpl extends LocoSocektHandler {
@@ -28,19 +36,22 @@ public class LocoSocketHandlerImpl extends LocoSocektHandler {
MessageIn in = new MessageIn();
in.fromBson(packet.getBody());
checkRoom(in.getChatId());
checkMember(in.getChatId(), in.getAuthorId());
ChatRoom room = client.getChatRooms().get(in.getChatId());
if (!room.getType().equals("OM")) return;
Message msg = new Message(in.getLogId(), room, new Member(in.getAuthorId(), in.getAuthorNickname()), in.getType(), in.getMessage(), in.getAttachment());
Member member = room.getMembers().get(in.getAuthorId());
Message msg = new Message(in.getLogId(), room, member, in.getType(), in.getMessage(), in.getAttachment());
client.getTalkHandler().onMessage(msg);
} else if (packet.getMethod().equals("NEWMEM")) {
NewMemIn in = new NewMemIn();
in.fromBson(packet.getBody());
checkRoom(in.getChatId());
checkMember(in.getChatId(), in.getUserId());
ChatRoom room = client.getChatRooms().get(in.getChatId());
if (!room.getType().equals("OM")) return;
client.getTalkHandler().onNewMember(room, new Member(in.getUserId(), in.getNickname()));
client.getTalkHandler().onNewMember(room, room.getMembers().get(in.getUserId()));
} else if (packet.getMethod().equals("DELMEM")) {
DelMemIn in = new DelMemIn();
in.fromBson(packet.getBody());
@@ -49,6 +60,14 @@ public class LocoSocketHandlerImpl extends LocoSocektHandler {
ChatRoom room = client.getChatRooms().get(in.getChatId());
if (!room.getType().equals("OM")) return;
client.getTalkHandler().onDelMember(room, new Member(in.getUserId(), in.getNickname()));
room.getMembers().remove(in.getUserId());
} else if (packet.getMethod().equals("SYNCLINKPF")) {
SyncLinkPfIn si = new SyncLinkPfIn();
si.fromBson(packet.getBody());
ChatRoom room = client.getChatRooms().get(si.getChatId());
room.getMembers().remove(si.getUserId());
Member member = new Member(si.getUserId(), si.getNickName());
room.getMembers().put(si.getUserId(), member);
}
}
@@ -66,25 +85,48 @@ public class LocoSocketHandlerImpl extends LocoSocektHandler {
InfoLinkIn li = new InfoLinkIn();
li.fromBson(client.getSocket().writeAndRead(new LocoPacket("INFOLINK", lo.toBson())).getBody());
room.setName(li.getName());
} else if (ci.getType().equals("MultiChat")) {
if (!ci.getChatMetas().isEmpty()) {
JsonArray chatMetas = ci.getChatMetas();
room.setName(chatMetas.get(0).getAsJsonObject().get("content").getAsString());
} else {
JsonArray displayMembers = ci.getDisplayMembers();
String name = "";
for (int i = 0; i < displayMembers.size(); i++) {
name += displayMembers.get(i).getAsJsonObject().get("nickName").getAsString() + ", ";
}
room.setName(name);
}
} else if (ci.getType().equals("DirectChat")) {
room.setName(ci.getDisplayMembers().get(0).getAsJsonObject().get("nickName").getAsString());
}
client.getChatRooms().put(chatId, room);
}
}
private void checkMember(long chatId, long memberId) {
ChatRoom room = client.getChatRooms().get(chatId);
if (!room.getMembers().containsKey(memberId)) {
MemberOut mo = new MemberOut(chatId, memberId);
MemberIn mi = new MemberIn();
mi.fromBson(client.getSocket().writeAndRead(new LocoPacket("MEMBER", mo.toBson())).getBody());
room.getMembers().put(memberId, new Member(memberId, mi.getNickName()));
}
}
@Override
public void onConnect() {
System.out.println("연결 성공");
}
@Override
public void onDisconnect() {
client.connected = false;
System.out.println("연결 끊어짐");
System.out.println("연결 끊");
}
@Override
public void onError(Exception e) {
System.out.println(e.getMessage());
}
}