asdf
This commit is contained in:
BIN
ex.png
BIN
ex.png
Binary file not shown.
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 79 KiB |
File diff suppressed because one or more lines are too long
@@ -4,9 +4,9 @@ import com.github.netricecake.kakao.exception.BadCredentialsException;
|
|||||||
import com.github.netricecake.kakao.exception.InvalidDeviceNameException;
|
import com.github.netricecake.kakao.exception.InvalidDeviceNameException;
|
||||||
import com.github.netricecake.kakao.exception.InvalidDeviceUUIDException;
|
import com.github.netricecake.kakao.exception.InvalidDeviceUUIDException;
|
||||||
import com.github.netricecake.kakao.exception.UnregisteredDeviceException;
|
import com.github.netricecake.kakao.exception.UnregisteredDeviceException;
|
||||||
import com.github.netricecake.loco.packet.inbound.login.GetConfIn;
|
import com.github.netricecake.kakao.packet.inbound.login.GetConfIn;
|
||||||
import com.github.netricecake.loco.packet.outbound.login.GetConfOut;
|
import com.github.netricecake.kakao.packet.outbound.login.GetConfOut;
|
||||||
import com.github.netricecake.loco.util.ByteUtil;
|
import com.github.netricecake.kakao.util.ByteUtil;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
|||||||
@@ -1,21 +1,15 @@
|
|||||||
package com.github.netricecake.kakao;
|
package com.github.netricecake.kakao;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.packet.inbound.member.*;
|
||||||
import com.github.netricecake.kakao.structs.ChatRoom;
|
import com.github.netricecake.kakao.structs.ChatRoom;
|
||||||
import com.github.netricecake.kakao.structs.Member;
|
import com.github.netricecake.kakao.structs.Member;
|
||||||
|
import com.github.netricecake.kakao.structs.MemberType;
|
||||||
import com.github.netricecake.kakao.structs.Message;
|
import com.github.netricecake.kakao.structs.Message;
|
||||||
import com.github.netricecake.loco.LocoPacket;
|
import com.github.netricecake.kakao.loco.LocoPacket;
|
||||||
import com.github.netricecake.loco.LocoSocketHandler;
|
import com.github.netricecake.kakao.loco.LocoSocketHandler;
|
||||||
import com.github.netricecake.loco.packet.inbound.member.*;
|
import com.github.netricecake.kakao.packet.inbound.message.MessageIn;
|
||||||
import com.github.netricecake.loco.packet.inbound.message.MessageIn;
|
import com.github.netricecake.kakao.packet.outbound.member.MemberOut;
|
||||||
import com.github.netricecake.loco.packet.inbound.room.ChatInfoIn;
|
import com.github.netricecake.kakao.packet.outbound.message.MessageOut;
|
||||||
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.member.GetMemberOut;
|
|
||||||
import com.github.netricecake.loco.packet.outbound.room.InfoLinkOut;
|
|
||||||
import com.github.netricecake.loco.packet.outbound.message.MessageOut;
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
public class LocoSocketHandlerImpl extends LocoSocketHandler {
|
public class LocoSocketHandlerImpl extends LocoSocketHandler {
|
||||||
|
|
||||||
@@ -30,100 +24,42 @@ public class LocoSocketHandlerImpl extends LocoSocketHandler {
|
|||||||
if (packet.getMethod().equals("MSG")) {
|
if (packet.getMethod().equals("MSG")) {
|
||||||
client.getSocket().write(new LocoPacket(packet.getPacketId(), "MSG", new MessageOut().toBson()));
|
client.getSocket().write(new LocoPacket(packet.getPacketId(), "MSG", new MessageOut().toBson()));
|
||||||
|
|
||||||
MessageIn in = new MessageIn();
|
MessageIn in = new MessageIn(packet.getBody());
|
||||||
in.fromBson(packet.getBody());
|
ChatRoom chatRoom = client.getChatRoom(in.getChatId());
|
||||||
checkRoom(in.getChatId());
|
if (chatRoom == null) return;
|
||||||
checkMember(in.getChatId(), in.getAuthorId());
|
Member member = chatRoom.getMembers().get(in.getAuthorId());
|
||||||
|
|
||||||
ChatRoom room = client.getChatRooms().get(in.getChatId());
|
Message msg = new Message(client, chatRoom, in.getLogId(), member, in.getType(), in.getSendAt(), 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());
|
|
||||||
Thread.ofVirtual().start(() -> {
|
Thread.ofVirtual().start(() -> {
|
||||||
client.getTalkHandler().onMessage(msg);
|
client.getTalkHandler().onMessage(msg);
|
||||||
});
|
});
|
||||||
} else if (packet.getMethod().equals("NEWMEM")) {
|
} else if (packet.getMethod().equals("NEWMEM")) {
|
||||||
NewMemIn in = new NewMemIn();
|
NewMemIn res = new NewMemIn(packet.getBody());
|
||||||
in.fromBson(packet.getBody());
|
ChatRoom chatRoom = client.getChatRoom(res.getChatId());
|
||||||
checkRoom(in.getChatId());
|
if (chatRoom == null) return;
|
||||||
checkMember(in.getChatId(), in.getUserId());
|
MemberOut mo = new MemberOut(res.getChatId(), res.getUserId());
|
||||||
|
MemberIn mi = new MemberIn(client.getSocket().writeAndRead(new LocoPacket("MEMBER", mo.toBson())).getBody());
|
||||||
|
chatRoom.getMembers().put(res.getUserId(), new Member(client, chatRoom, res.getUserId(), mi.getType(), mi.getNickName(), mi.getProfileImageUrl(), mi.getFullProfileImageUrl(), mi.getOriginalProfileImageUrl(), mi.getProfileLinkId(), mi.getMemberType(), mi.getProfileType()));
|
||||||
|
|
||||||
ChatRoom room = client.getChatRooms().get(in.getChatId());
|
|
||||||
if (!room.getType().equals("OM")) return;
|
|
||||||
Thread.ofVirtual().start(() -> {
|
Thread.ofVirtual().start(() -> {
|
||||||
client.getTalkHandler().onNewMember(room, room.getMembers().get(in.getUserId()));
|
client.getTalkHandler().onNewMember(chatRoom, chatRoom.getMembers().get(res.getUserId()));
|
||||||
});
|
});
|
||||||
} else if (packet.getMethod().equals("DELMEM")) {
|
} else if (packet.getMethod().equals("DELMEM")) {
|
||||||
DelMemIn in = new DelMemIn();
|
DelMemIn in = new DelMemIn(packet.getBody());
|
||||||
in.fromBson(packet.getBody());
|
ChatRoom chatRoom = client.getChatRoom(in.getChatId());
|
||||||
checkRoom(in.getChatId());
|
if (chatRoom == null) return;
|
||||||
|
chatRoom.getMembers().remove(in.getUserId());
|
||||||
|
|
||||||
ChatRoom room = client.getChatRooms().get(in.getChatId());
|
|
||||||
if (!room.getType().equals("OM")) return;
|
|
||||||
Thread.ofVirtual().start(() -> {
|
Thread.ofVirtual().start(() -> {
|
||||||
client.getTalkHandler().onDelMember(room, new Member(in.getUserId(), in.getNickname(), 2));
|
client.getTalkHandler().onDelMember(chatRoom, in.getUserId(), in.getNickname());
|
||||||
});
|
});
|
||||||
room.getMembers().remove(in.getUserId());
|
|
||||||
} else if (packet.getMethod().equals("SYNCLINKPF")) {
|
} else if (packet.getMethod().equals("SYNCLINKPF")) {
|
||||||
SyncLinkPfIn si = new SyncLinkPfIn();
|
SyncLinkPfIn res = new SyncLinkPfIn(packet.getBody());
|
||||||
si.fromBson(packet.getBody());
|
ChatRoom chatRoom = client.getChatRoom(res.getChatId());
|
||||||
ChatRoom room = client.getChatRooms().get(si.getChatId());
|
if (chatRoom == null) return;
|
||||||
room.getMembers().remove(si.getUserId());
|
chatRoom.getMembers().remove(res.getUserId());
|
||||||
Member member = new Member(si.getUserId(), si.getNickName(), 2);
|
Member member = new Member(client, chatRoom, res.getUserId(), 1000, res.getNickName(), res.getProfileImageUrl(), res.getFullProfileImageUrl(), res.getOriginalProfileImageUrl(), res.getProfileLinkId(), MemberType.MEMBER, res.getProfileType());
|
||||||
room.getMembers().put(si.getUserId(), member);
|
chatRoom.getMembers().put(res.getUserId(), member);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkRoom(long chatId) {
|
|
||||||
if (!client.getChatRooms().containsKey(chatId)) {
|
|
||||||
ChatInfoOut co = new ChatInfoOut(chatId);
|
|
||||||
ChatInfoIn ci = new ChatInfoIn();
|
|
||||||
ci.fromBson(client.getSocket().writeAndRead(new LocoPacket("CHATINFO", co.toBson())).getBody());
|
|
||||||
ChatRoom room = new ChatRoom();
|
|
||||||
room.setChatId(chatId);
|
|
||||||
room.setType(ci.getType());
|
|
||||||
room.setLinkId(ci.getLinkId());
|
|
||||||
GetMemberOut gmo = new GetMemberOut(chatId);
|
|
||||||
GetMemberIn gmi = new GetMemberIn();
|
|
||||||
gmi.fromBson(client.getSocket().writeAndRead(new LocoPacket("GETMEM", gmo.toBson())).getBody());
|
|
||||||
for (int i = 0; i < gmi.getMembers().size(); i++) {
|
|
||||||
JsonObject json = gmi.getMembers().get(i).getAsJsonObject();
|
|
||||||
int type = json.get("mt") != null ? json.get("mt").getAsInt() : 2;
|
|
||||||
Member member = new Member(json.get("userId").getAsLong(), json.get("nickName").getAsString(), type);
|
|
||||||
room.getMembers().put(member.getId(), member);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ci.getType().equals("OM")) {
|
|
||||||
InfoLinkOut lo = new InfoLinkOut(ci.getLinkId());
|
|
||||||
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(), mi.getMemberType()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,34 @@
|
|||||||
package com.github.netricecake.kakao;
|
package com.github.netricecake.kakao;
|
||||||
|
|
||||||
import com.github.netricecake.kakao.exception.*;
|
import com.github.netricecake.kakao.exception.*;
|
||||||
import com.github.netricecake.kakao.structs.ChatRoom;
|
import com.github.netricecake.kakao.packet.inbound.member.GetMemberIn;
|
||||||
import com.github.netricecake.loco.LocoPacket;
|
import com.github.netricecake.kakao.packet.inbound.message.PostIn;
|
||||||
import com.github.netricecake.loco.LocoSocketHandler;
|
import com.github.netricecake.kakao.packet.inbound.message.ShipIn;
|
||||||
import com.github.netricecake.loco.LocoSocket;
|
import com.github.netricecake.kakao.packet.inbound.room.ChatInfoIn;
|
||||||
import com.github.netricecake.loco.packet.inbound.login.CheckInIn;
|
import com.github.netricecake.kakao.packet.inbound.room.InfoLinkIn;
|
||||||
import com.github.netricecake.loco.packet.inbound.login.GetConfIn;
|
import com.github.netricecake.kakao.packet.outbound.member.GetMemberOut;
|
||||||
import com.github.netricecake.loco.packet.inbound.login.LoginListIn;
|
import com.github.netricecake.kakao.packet.outbound.message.PostOut;
|
||||||
import com.github.netricecake.loco.packet.inbound.message.PostIn;
|
import com.github.netricecake.kakao.packet.outbound.message.ShipOut;
|
||||||
import com.github.netricecake.loco.packet.inbound.message.ShipIn;
|
import com.github.netricecake.kakao.packet.outbound.room.ChatInfoOut;
|
||||||
import com.github.netricecake.loco.packet.inbound.message.WriteIn;
|
import com.github.netricecake.kakao.packet.outbound.room.InfoLinkOut;
|
||||||
import com.github.netricecake.loco.packet.outbound.login.CheckInOut;
|
import com.github.netricecake.kakao.structs.*;
|
||||||
import com.github.netricecake.loco.packet.outbound.login.LoginListOut;
|
import com.github.netricecake.kakao.loco.LocoPacket;
|
||||||
import com.github.netricecake.loco.packet.outbound.etc.PingOut;
|
import com.github.netricecake.kakao.loco.LocoSocketHandler;
|
||||||
import com.github.netricecake.loco.packet.outbound.message.PostOut;
|
import com.github.netricecake.kakao.loco.LocoSocket;
|
||||||
import com.github.netricecake.loco.packet.outbound.message.ShipOut;
|
import com.github.netricecake.kakao.packet.inbound.login.CheckInIn;
|
||||||
import com.github.netricecake.loco.packet.outbound.message.WriteOut;
|
import com.github.netricecake.kakao.packet.inbound.login.GetConfIn;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.packet.inbound.login.LoginListIn;
|
||||||
import com.github.netricecake.loco.util.ByteUtil;
|
import com.github.netricecake.kakao.packet.inbound.message.WriteIn;
|
||||||
|
import com.github.netricecake.kakao.packet.outbound.login.CheckInOut;
|
||||||
|
import com.github.netricecake.kakao.packet.outbound.login.LoginListOut;
|
||||||
|
import com.github.netricecake.kakao.packet.outbound.etc.PingOut;
|
||||||
|
import com.github.netricecake.kakao.packet.outbound.member.KickMemberOut;
|
||||||
|
import com.github.netricecake.kakao.packet.outbound.message.WriteOut;
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.github.netricecake.kakao.util.ByteUtil;
|
||||||
|
import com.github.netricecake.kakao.util.ImageUtil;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -42,7 +51,6 @@ public class TalkClient {
|
|||||||
private final String deviceUuid;
|
private final String deviceUuid;
|
||||||
private final String sessionDir;
|
private final String sessionDir;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final Map<Long, ChatRoom> chatRooms = new HashMap<>();
|
private final Map<Long, ChatRoom> chatRooms = new HashMap<>();
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -148,22 +156,75 @@ public class TalkClient {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendMessage(long chatId, int type, String message, String extra) {
|
public ChatRoom getChatRoom(long chatId) {
|
||||||
WriteOut wo = new WriteOut();
|
if (chatRooms.containsKey(chatId)) return chatRooms.get(chatId);
|
||||||
wo.setChatId(chatId);
|
ChatInfoOut req = new ChatInfoOut(chatId);
|
||||||
wo.setType(type);
|
|
||||||
wo.setMessage(message);
|
ChatInfoIn res = new ChatInfoIn(socket.writeAndRead(new LocoPacket("CHATINFO", req.toBson())).getBody());
|
||||||
wo.setExtra(extra);
|
if (res.getStatus() != 0) return null;
|
||||||
WriteIn wi = new WriteIn();
|
|
||||||
wi.fromBson(socket.writeAndRead(new LocoPacket("WRITE", wo.toBson())).getBody());
|
GetMemberOut memberReq = new GetMemberOut(chatId);
|
||||||
return wi.getStatus() == 0;
|
GetMemberIn memberRes = new GetMemberIn(socket.writeAndRead(new LocoPacket("GETMEM", memberReq.toBson())).getBody());
|
||||||
|
|
||||||
|
ChatRoom chatRoom = null;
|
||||||
|
if (res.getType().equals(ChatRoomType.OPEN_CHAT) || res.getType().equals(ChatRoomType.OPEN_DIRECT)) {
|
||||||
|
InfoLinkOut linkReq = new InfoLinkOut(res.getLinkId());
|
||||||
|
InfoLinkIn linkRes = new InfoLinkIn(socket.writeAndRead(new LocoPacket("INFOLINK", linkReq.toBson())).getBody());
|
||||||
|
|
||||||
|
chatRoom = new ChatRoom(this, chatId, res.getType(), linkRes.getName(), res.getLinkId());
|
||||||
|
for (int i = 0; i < memberRes.getMembers().size(); i++) {
|
||||||
|
JsonObject json = memberRes.getMembers().get(i).getAsJsonObject();
|
||||||
|
Member member = new Member(this, chatRoom, json.get("userId").getAsLong(), json.get("type").getAsInt(), json.get("nickName").getAsString(), json.get("pi").getAsString(), json.get("fpi").getAsString(), json.get("opi").getAsString(), json.get("ptp").getAsInt() == 16 ? json.get("pli").getAsLong() : 0, json.get("mt").getAsInt(), json.get("ptp").getAsInt());
|
||||||
|
chatRoom.getMembers().put(member.getUserId(), member);
|
||||||
|
}
|
||||||
|
} else if (res.getType().equals(ChatRoomType.DIRECT_CHAT)) {
|
||||||
|
chatRoom = new ChatRoom(this, chatId, res.getType(), res.getDisplayMembers().get(0).getAsJsonObject().get("nickName").getAsString(), 0);
|
||||||
|
for (int i = 0; i < memberRes.getMembers().size(); i++) {
|
||||||
|
JsonObject json = memberRes.getMembers().get(i).getAsJsonObject();
|
||||||
|
Member member = new Member(this, chatRoom, json.get("userId").getAsLong(), json.get("type").getAsInt(), json.get("nickName").getAsString(), json.get("profileImageUrl").getAsString(), json.get("fullProfileImageUrl").getAsString(), json.get("originalProfileImageUrl").getAsString(), 0, MemberType.MEMBER, 0);
|
||||||
|
chatRoom.getMembers().put(member.getUserId(), member);
|
||||||
|
}
|
||||||
|
} else if (res.getType().equals(ChatRoomType.GROUP_CHAT)) {
|
||||||
|
if (!res.getChatMetas().isEmpty()) {
|
||||||
|
JsonArray chatMetas = res.getChatMetas();
|
||||||
|
chatRoom = new ChatRoom(this, chatId, res.getType(), chatMetas.get(0).getAsJsonObject().get("content").getAsString(), 0);
|
||||||
|
} else {
|
||||||
|
JsonArray displayMembers = res.getDisplayMembers();
|
||||||
|
String name = "";
|
||||||
|
for (int i = 0; i < displayMembers.size(); i++) {
|
||||||
|
name += displayMembers.get(i).getAsJsonObject().get("nickName").getAsString() + ", ";
|
||||||
|
}
|
||||||
|
chatRoom = new ChatRoom(this, chatId, res.getType(), name, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < memberRes.getMembers().size(); i++) {
|
||||||
|
JsonObject json = memberRes.getMembers().get(i).getAsJsonObject();
|
||||||
|
Member member = new Member(this, chatRoom, json.get("userId").getAsLong(), json.get("type").getAsInt(), json.get("nickName").getAsString(), json.get("profileImageUrl").getAsString(), json.get("fullProfileImageUrl").getAsString(), json.get("originalProfileImageUrl").getAsString(), 0, MemberType.MEMBER, 0);
|
||||||
|
chatRoom.getMembers().put(member.getUserId(), member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return chatRoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendMessage(long chatId, String message, String extra) {
|
||||||
|
WriteOut req = new WriteOut();
|
||||||
|
req.setChatId(chatId);
|
||||||
|
req.setType(MessageType.TEXT);
|
||||||
|
req.setMessage(message);
|
||||||
|
req.setExtra(extra);
|
||||||
|
|
||||||
|
WriteIn res = new WriteIn(socket.writeAndRead(new LocoPacket("WRITE", req.toBson())).getBody());
|
||||||
|
return res.getStatus() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendMessage(long chatId, String message) {
|
public boolean sendMessage(long chatId, String message) {
|
||||||
return sendMessage(chatId, 1, message, "{}");
|
return sendMessage(chatId, message, "{}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendJpg(long chatId, byte[] image, String format, int width, int height) {
|
public boolean sendJpg(long chatId, byte[] image) {
|
||||||
|
ImageUtil.ImageMeta meta = ImageUtil.getImageMeta(image);
|
||||||
|
if (!meta.isValidJpeg()) return false;
|
||||||
LocoSocket postSocket = null;
|
LocoSocket postSocket = null;
|
||||||
try {
|
try {
|
||||||
MessageDigest md = MessageDigest.getInstance("SHA-1");
|
MessageDigest md = MessageDigest.getInstance("SHA-1");
|
||||||
@@ -171,8 +232,7 @@ public class TalkClient {
|
|||||||
so.setChatId(chatId);
|
so.setChatId(chatId);
|
||||||
so.setSize(image.length);
|
so.setSize(image.length);
|
||||||
so.setCheckSum(ByteUtil.byteArrayToHexString(md.digest(image)));
|
so.setCheckSum(ByteUtil.byteArrayToHexString(md.digest(image)));
|
||||||
ShipIn si = new ShipIn();
|
ShipIn si = new ShipIn(socket.writeAndRead(new LocoPacket("SHIP", so.toBson())).getBody());
|
||||||
si.fromBson(socket.writeAndRead(new LocoPacket("SHIP", so.toBson())).getBody());
|
|
||||||
if (si.getStatus() != 0) return false;
|
if (si.getStatus() != 0) return false;
|
||||||
|
|
||||||
final CompletableFuture<Integer> future = new CompletableFuture<>();
|
final CompletableFuture<Integer> future = new CompletableFuture<>();
|
||||||
@@ -191,11 +251,10 @@ public class TalkClient {
|
|||||||
po.setKey(si.getKey());
|
po.setKey(si.getKey());
|
||||||
po.setSize(image.length);
|
po.setSize(image.length);
|
||||||
po.setChatId(chatId);
|
po.setChatId(chatId);
|
||||||
po.setWidth(width);
|
po.setWidth(meta.getWidth());
|
||||||
po.setHeight(height);
|
po.setHeight(meta.getHeight());
|
||||||
|
|
||||||
PostIn pi = new PostIn();
|
PostIn pi = new PostIn(postSocket.writeAndRead(new LocoPacket("POST", po.toBson())).getBody());
|
||||||
pi.fromBson(postSocket.writeAndRead(new LocoPacket("POST", po.toBson())).getBody());
|
|
||||||
if (pi.getStatus() != 0) {
|
if (pi.getStatus() != 0) {
|
||||||
postSocket.close();
|
postSocket.close();
|
||||||
return false;
|
return false;
|
||||||
@@ -214,7 +273,33 @@ public class TalkClient {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getUserId() {
|
public boolean reply(Message target, String message) {
|
||||||
|
JsonObject extraObject = new JsonObject();
|
||||||
|
extraObject.addProperty("src_logId", target.getLogId());
|
||||||
|
extraObject.addProperty("src_userId", target.getAuthor().getUserId());
|
||||||
|
extraObject.addProperty("src_message", target.getMessage());
|
||||||
|
extraObject.addProperty("src_type", target.getType());
|
||||||
|
extraObject.addProperty("src_linkId", target.getChatRoom().getLinkId());
|
||||||
|
|
||||||
|
WriteOut req = new WriteOut();
|
||||||
|
req.setChatId(target.getChatRoom().getChatId());
|
||||||
|
req.setMessage(message);
|
||||||
|
req.setType(MessageType.REPLY);
|
||||||
|
req.setExtra(extraObject.toString());
|
||||||
|
|
||||||
|
JsonObject res = socket.writeAndRead(new LocoPacket("WRITE", req.toBson())).getBodyJson();
|
||||||
|
return res.get("status").getAsInt() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean kickMember(long chatId, long linkId, long memberId) {
|
||||||
|
KickMemberOut req = new KickMemberOut(chatId, linkId, memberId);
|
||||||
|
|
||||||
|
JsonObject res = socket.writeAndRead(new LocoPacket("KICKMEM", req.toBson())).getBodyJson();
|
||||||
|
// 채팅 로그 저장할거면 이거도 처리
|
||||||
|
return res.get("status").getAsInt() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMyUserId() {
|
||||||
return loginData.userId;
|
return loginData.userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,14 @@ public class TalkHandler {
|
|||||||
@Setter
|
@Setter
|
||||||
private TalkClient talkClient;
|
private TalkClient talkClient;
|
||||||
|
|
||||||
|
public void onConnect() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDisconnect() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void onMessage(Message message) {
|
public void onMessage(Message message) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -20,7 +28,7 @@ public class TalkHandler {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDelMember(ChatRoom chatRoom, Member member) {
|
public void onDelMember(ChatRoom chatRoom, long userId, String nickName) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.github.netricecake.loco;
|
package com.github.netricecake.kakao.loco;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@@ -38,4 +40,16 @@ public class LocoPacket {
|
|||||||
this(-1, method, body);
|
this(-1, method, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LocoPacket(int packetId, String method, JsonObject body) {
|
||||||
|
this(packetId, method, BsonUtil.jsonObjectToBson(body));
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocoPacket(String method, JsonObject body) {
|
||||||
|
this(-1, method, BsonUtil.jsonObjectToBson(body));
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonObject getBodyJson() {
|
||||||
|
return BsonUtil.bsonToJsonObject(body);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.github.netricecake.loco;
|
package com.github.netricecake.kakao.loco;
|
||||||
|
|
||||||
import com.github.netricecake.loco.crypto.CryptoManager;
|
import com.github.netricecake.kakao.loco.crypto.CryptoManager;
|
||||||
import com.github.netricecake.loco.codec.LocoCodec;
|
import com.github.netricecake.kakao.loco.codec.LocoCodec;
|
||||||
import com.github.netricecake.loco.codec.SecureLayerCodec;
|
import com.github.netricecake.kakao.loco.codec.SecureLayerCodec;
|
||||||
import io.netty.bootstrap.Bootstrap;
|
import io.netty.bootstrap.Bootstrap;
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
import io.netty.channel.nio.NioIoHandler;
|
import io.netty.channel.nio.NioIoHandler;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.netricecake.loco;
|
package com.github.netricecake.kakao.loco;
|
||||||
|
|
||||||
public class LocoSocketHandler {
|
public class LocoSocketHandler {
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.github.netricecake.loco.codec;
|
package com.github.netricecake.kakao.loco.codec;
|
||||||
|
|
||||||
import com.github.netricecake.loco.LocoPacket;
|
import com.github.netricecake.kakao.loco.LocoPacket;
|
||||||
import com.github.netricecake.loco.LocoSocketHandler;
|
import com.github.netricecake.kakao.loco.LocoSocketHandler;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.github.netricecake.loco.util.ByteUtil;
|
import com.github.netricecake.kakao.util.ByteUtil;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.MessageToMessageCodec;
|
import io.netty.handler.codec.MessageToMessageCodec;
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.codec;
|
package com.github.netricecake.kakao.loco.codec;
|
||||||
|
|
||||||
import com.github.netricecake.loco.crypto.CryptoManager;
|
import com.github.netricecake.kakao.loco.crypto.CryptoManager;
|
||||||
import com.github.netricecake.loco.util.ByteUtil;
|
import com.github.netricecake.kakao.util.ByteUtil;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.MessageToMessageCodec;
|
import io.netty.handler.codec.MessageToMessageCodec;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.crypto;
|
package com.github.netricecake.kakao.loco.crypto;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.ByteUtil;
|
import com.github.netricecake.kakao.util.ByteUtil;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import javax.crypto.Cipher;
|
import javax.crypto.Cipher;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.netricecake.loco.packet;
|
package com.github.netricecake.kakao.packet;
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.inbound.etc;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
|
|
||||||
|
public class PingIn extends InboundPacket {
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.login;
|
package com.github.netricecake.kakao.packet.inbound.login;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.login;
|
package com.github.netricecake.kakao.packet.inbound.login;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.login;
|
package com.github.netricecake.kakao.packet.inbound.login;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.member;
|
package com.github.netricecake.kakao.packet.inbound.member;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -15,7 +15,7 @@ public class DelMemIn extends InboundPacket {
|
|||||||
|
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public DelMemIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson).get("chatLog").getAsJsonObject();
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson).get("chatLog").getAsJsonObject();
|
||||||
chatId = jsonObject.get("chatId").getAsLong();
|
chatId = jsonObject.get("chatId").getAsLong();
|
||||||
userId = jsonObject.get("authorId").getAsLong();
|
userId = jsonObject.get("authorId").getAsLong();
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.member;
|
package com.github.netricecake.kakao.packet.inbound.member;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -13,7 +13,7 @@ public class GetMemberIn extends InboundPacket {
|
|||||||
|
|
||||||
private JsonArray members;
|
private JsonArray members;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public GetMemberIn(byte[] bson) {
|
||||||
JsonObject json = BsonUtil.bsonToJsonObject(bson);
|
JsonObject json = BsonUtil.bsonToJsonObject(bson);
|
||||||
status = json.get("status").getAsInt();
|
status = json.get("status").getAsInt();
|
||||||
if (status == 0) members = json.get("members").getAsJsonArray();
|
if (status == 0) members = json.get("members").getAsJsonArray();
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.inbound.member;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.github.netricecake.kakao.structs.MemberType;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class MemberIn extends InboundPacket {
|
||||||
|
|
||||||
|
private long userId;
|
||||||
|
|
||||||
|
private int type;
|
||||||
|
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
|
private String profileImageUrl;
|
||||||
|
|
||||||
|
private String fullProfileImageUrl;
|
||||||
|
|
||||||
|
private String originalProfileImageUrl;
|
||||||
|
|
||||||
|
private long profileLinkId;
|
||||||
|
|
||||||
|
private int memberType = MemberType.MEMBER;
|
||||||
|
|
||||||
|
private int profileType;
|
||||||
|
|
||||||
|
public MemberIn(byte[] bson) {
|
||||||
|
JsonObject json = BsonUtil.bsonToJsonObject(bson).get("members").getAsJsonArray().get(0).getAsJsonObject();
|
||||||
|
userId = json.get("userId").getAsLong();
|
||||||
|
type = json.get("type").getAsInt();
|
||||||
|
nickName = json.get("nickName").getAsString();
|
||||||
|
profileImageUrl = json.get("pi").getAsString();
|
||||||
|
fullProfileImageUrl = json.get("fpi").getAsString();
|
||||||
|
originalProfileImageUrl = json.get("opi").getAsString();
|
||||||
|
if (type == 1000) {
|
||||||
|
memberType = json.get("mt").getAsInt();
|
||||||
|
profileType = json.get("ptp").getAsInt();
|
||||||
|
profileLinkId = profileType == 16 ? json.get("pli").getAsLong() : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.member;
|
package com.github.netricecake.kakao.packet.inbound.member;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -15,7 +15,7 @@ public class NewMemIn extends InboundPacket {
|
|||||||
|
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public NewMemIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson).get("chatLog").getAsJsonObject();
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson).get("chatLog").getAsJsonObject();
|
||||||
chatId = jsonObject.get("chatId").getAsLong();
|
chatId = jsonObject.get("chatId").getAsLong();
|
||||||
userId = jsonObject.get("authorId").getAsLong();
|
userId = jsonObject.get("authorId").getAsLong();
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.inbound.member;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class SyncLinkPfIn extends InboundPacket {
|
||||||
|
|
||||||
|
private long chatId;
|
||||||
|
|
||||||
|
private long linkId;
|
||||||
|
|
||||||
|
private long userId;
|
||||||
|
|
||||||
|
private int profileType;
|
||||||
|
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
|
private String profileImageUrl;
|
||||||
|
|
||||||
|
private String fullProfileImageUrl;
|
||||||
|
|
||||||
|
private String originalProfileImageUrl;
|
||||||
|
|
||||||
|
private long profileLinkId;
|
||||||
|
|
||||||
|
public SyncLinkPfIn(byte[] bson) {
|
||||||
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
|
chatId = jsonObject.get("c").getAsLong();
|
||||||
|
linkId = jsonObject.get("li").getAsLong();
|
||||||
|
JsonObject olu = jsonObject.get("olu").getAsJsonObject();
|
||||||
|
userId = olu.get("userId").getAsLong();
|
||||||
|
profileType = olu.get("ptp").getAsInt();
|
||||||
|
nickName = olu.get("nn").getAsString();
|
||||||
|
profileImageUrl = olu.get("pi").getAsString();
|
||||||
|
fullProfileImageUrl = olu.get("fpi").getAsString();
|
||||||
|
originalProfileImageUrl = olu.get("opi").getAsString();
|
||||||
|
profileLinkId = profileType == 16 ? olu.get("pli").getAsLong() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.message;
|
package com.github.netricecake.kakao.packet.inbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -18,11 +18,13 @@ public class MessageIn extends InboundPacket {
|
|||||||
|
|
||||||
private int type;
|
private int type;
|
||||||
|
|
||||||
|
private long sendAt;
|
||||||
|
|
||||||
private String message;
|
private String message;
|
||||||
|
|
||||||
private String attachment;
|
private String attachment;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public MessageIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
chatId = jsonObject.get("chatId").getAsLong();
|
chatId = jsonObject.get("chatId").getAsLong();
|
||||||
logId = jsonObject.get("logId").getAsLong();
|
logId = jsonObject.get("logId").getAsLong();
|
||||||
@@ -31,6 +33,7 @@ public class MessageIn extends InboundPacket {
|
|||||||
authorNickname = jsonObject.get("authorNickname").getAsString(); // 옵챗 아니면 이필드가 없음;;
|
authorNickname = jsonObject.get("authorNickname").getAsString(); // 옵챗 아니면 이필드가 없음;;
|
||||||
} catch (Exception e) {}
|
} catch (Exception e) {}
|
||||||
type = jsonObject.get("chatLog").getAsJsonObject().get("type").getAsInt();
|
type = jsonObject.get("chatLog").getAsJsonObject().get("type").getAsInt();
|
||||||
|
sendAt = jsonObject.get("chatLog").getAsJsonObject().get("sendAt").getAsLong();
|
||||||
message = jsonObject.get("chatLog").getAsJsonObject().get("message").getAsString();
|
message = jsonObject.get("chatLog").getAsJsonObject().get("message").getAsString();
|
||||||
try {
|
try {
|
||||||
attachment = jsonObject.get("chatLog").getAsJsonObject().get("attachment").getAsString();
|
attachment = jsonObject.get("chatLog").getAsJsonObject().get("attachment").getAsString();
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.message;
|
package com.github.netricecake.kakao.packet.inbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ public class PostIn {
|
|||||||
|
|
||||||
private long o;
|
private long o;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public PostIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
this.status = jsonObject.get("status").getAsInt();
|
this.status = jsonObject.get("status").getAsInt();
|
||||||
this.o = jsonObject.get("o").getAsLong();
|
this.o = jsonObject.get("o").getAsLong();
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.message;
|
package com.github.netricecake.kakao.packet.inbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ public class ShipIn extends InboundPacket {
|
|||||||
|
|
||||||
private int port;
|
private int port;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public ShipIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
status = jsonObject.get("status").getAsInt();
|
status = jsonObject.get("status").getAsInt();
|
||||||
if (status != 0) return;
|
if (status != 0) return;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.message;
|
package com.github.netricecake.kakao.packet.inbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ public class WriteIn extends InboundPacket {
|
|||||||
|
|
||||||
private int status;
|
private int status;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public WriteIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
status = jsonObject.get("status").getAsInt();
|
status = jsonObject.get("status").getAsInt();
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.inbound.room;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.github.netricecake.kakao.structs.ChatRoomType;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class ChatInfoIn extends InboundPacket {
|
||||||
|
|
||||||
|
private int status;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private JsonArray chatMetas;
|
||||||
|
|
||||||
|
private JsonArray displayMembers;
|
||||||
|
|
||||||
|
private long linkId = 0;
|
||||||
|
|
||||||
|
public ChatInfoIn(byte[] bson) {
|
||||||
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
|
status = jsonObject.get("status").getAsInt();
|
||||||
|
if (status == 0) {
|
||||||
|
type = jsonObject.get("chatInfo").getAsJsonObject().get("type").getAsString();
|
||||||
|
chatMetas = jsonObject.get("chatInfo").getAsJsonObject().get("chatMetas").getAsJsonArray();
|
||||||
|
displayMembers = jsonObject.get("chatInfo").getAsJsonObject().get("displayMembers").getAsJsonArray();
|
||||||
|
if (type.equals(ChatRoomType.OPEN_CHAT) || type.equals(ChatRoomType.OPEN_DIRECT)) {
|
||||||
|
linkId = jsonObject.get("chatInfo").getAsJsonObject().get("li").getAsLong();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.room;
|
package com.github.netricecake.kakao.packet.inbound.room;
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
import com.github.netricecake.kakao.packet.InboundPacket;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ public class InfoLinkIn extends InboundPacket {
|
|||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
public InfoLinkIn(byte[] bson) {
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||||
name = jsonObject.get("ols").getAsJsonArray().get(0).getAsJsonObject().get("ln").getAsString();
|
name = jsonObject.get("ols").getAsJsonArray().get(0).getAsJsonObject().get("ln").getAsString();
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.outbound.etc;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
|
||||||
|
public class PingOut {
|
||||||
|
|
||||||
|
public byte[] toBson() {
|
||||||
|
return BsonUtil.jsonToBson("{}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.login;
|
package com.github.netricecake.kakao.packet.outbound.login;
|
||||||
|
|
||||||
import com.github.netricecake.kakao.KakaoApi;
|
import com.github.netricecake.kakao.KakaoApi;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.login;
|
package com.github.netricecake.kakao.packet.outbound.login;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
public class GetConfOut {
|
public class GetConfOut {
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.login;
|
package com.github.netricecake.kakao.packet.outbound.login;
|
||||||
|
|
||||||
import com.github.netricecake.kakao.KakaoApi;
|
import com.github.netricecake.kakao.KakaoApi;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.github.netricecake.loco.util.ByteUtil;
|
import com.github.netricecake.kakao.util.ByteUtil;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -38,16 +38,12 @@ public class LoginListOut {
|
|||||||
|
|
||||||
private long lbk = 0;
|
private long lbk = 0;
|
||||||
|
|
||||||
private byte[] rp; // 이거 뭐임
|
private byte[] rp = ByteUtil.hexStringToByteArray("0000ffff0000");; // 이거 뭐임
|
||||||
|
|
||||||
private boolean bg = true;
|
private boolean bg = true;
|
||||||
|
|
||||||
private String oauthToken;
|
private String oauthToken;
|
||||||
|
|
||||||
public LoginListOut() {
|
|
||||||
rp = ByteUtil.hexStringToByteArray("0000ffff0000");
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] toBson() {
|
public byte[] toBson() {
|
||||||
JsonObject rpObject = new JsonObject();
|
JsonObject rpObject = new JsonObject();
|
||||||
JsonObject binary = new JsonObject();
|
JsonObject binary = new JsonObject();
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.member;
|
package com.github.netricecake.kakao.packet.outbound.member;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
public class GetMemberOut {
|
public class GetMemberOut {
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.outbound.member;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class KickMemberOut {
|
||||||
|
|
||||||
|
private long chatId;
|
||||||
|
|
||||||
|
private long linkId;
|
||||||
|
|
||||||
|
private long memberId;
|
||||||
|
|
||||||
|
public KickMemberOut(long chatId, long linkId, long memberId) {
|
||||||
|
this.chatId = chatId;
|
||||||
|
this.linkId = linkId;
|
||||||
|
this.memberId = memberId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] toBson() {
|
||||||
|
JsonObject json = new JsonObject();
|
||||||
|
json.addProperty("li", linkId);
|
||||||
|
json.addProperty("c", chatId);
|
||||||
|
json.addProperty("mid", memberId);
|
||||||
|
json.addProperty("r", false);
|
||||||
|
return BsonUtil.jsonObjectToBson(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.member;
|
package com.github.netricecake.kakao.packet.outbound.member;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.github.netricecake.kakao.packet.outbound.member;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class PardonMemberOut {
|
||||||
|
|
||||||
|
private long chatId;
|
||||||
|
|
||||||
|
private long linkId;
|
||||||
|
|
||||||
|
private long memberId;
|
||||||
|
|
||||||
|
public byte[] toBson() {
|
||||||
|
JsonObject json = new JsonObject();
|
||||||
|
json.addProperty("li", linkId);
|
||||||
|
json.addProperty("c", chatId);
|
||||||
|
json.addProperty("mid", memberId);
|
||||||
|
return BsonUtil.jsonObjectToBson(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.message;
|
package com.github.netricecake.kakao.packet.outbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
|
||||||
public class MessageOut {
|
public class MessageOut {
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.message;
|
package com.github.netricecake.kakao.packet.outbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.kakao.KakaoApi;
|
import com.github.netricecake.kakao.KakaoApi;
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.message;
|
package com.github.netricecake.kakao.packet.outbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.message;
|
package com.github.netricecake.kakao.packet.outbound.message;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
|
import com.github.netricecake.kakao.structs.MessageType;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -12,11 +13,17 @@ import java.security.SecureRandom;
|
|||||||
public class WriteOut {
|
public class WriteOut {
|
||||||
|
|
||||||
private long chatId;
|
private long chatId;
|
||||||
|
|
||||||
private long msgId = new SecureRandom().nextLong();
|
private long msgId = new SecureRandom().nextLong();
|
||||||
|
|
||||||
private String message;
|
private String message;
|
||||||
private int type = 1;
|
|
||||||
|
private int type = MessageType.TEXT;
|
||||||
|
|
||||||
private boolean noSeen = false;
|
private boolean noSeen = false;
|
||||||
|
|
||||||
private String extra = "{}";
|
private String extra = "{}";
|
||||||
|
|
||||||
private int scope = 1;
|
private int scope = 1;
|
||||||
|
|
||||||
public byte[] toBson() {
|
public byte[] toBson() {
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.room;
|
package com.github.netricecake.kakao.packet.outbound.room;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
public class ChatInfoOut {
|
public class ChatInfoOut {
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.room;
|
package com.github.netricecake.kakao.packet.outbound.room;
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
import com.github.netricecake.kakao.util.BsonUtil;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
@@ -1,24 +1,39 @@
|
|||||||
package com.github.netricecake.kakao.structs;
|
package com.github.netricecake.kakao.structs;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.TalkClient;
|
||||||
|
import com.github.netricecake.kakao.util.ImageUtil;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
public class ChatRoom {
|
public class ChatRoom {
|
||||||
|
|
||||||
private long chatId;
|
@Getter
|
||||||
|
private final TalkClient client;
|
||||||
|
|
||||||
private String type;
|
@Getter
|
||||||
|
private final long chatId;
|
||||||
|
|
||||||
private String name;
|
@Getter
|
||||||
|
private final String type;
|
||||||
|
|
||||||
private long linkId;
|
@Getter
|
||||||
|
private final String name;
|
||||||
|
|
||||||
private Map<Long, Member> members = new HashMap<>();
|
@Getter
|
||||||
|
private final long linkId;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final Map<Long, Member> members = new HashMap<>();
|
||||||
|
|
||||||
|
public ChatRoom(TalkClient client, long chatId, String type, String name, long linkId) {
|
||||||
|
this.client = client;
|
||||||
|
this.chatId = chatId;
|
||||||
|
this.type = type;
|
||||||
|
this.name = name;
|
||||||
|
this.linkId = linkId;
|
||||||
|
}
|
||||||
|
|
||||||
public int getMemberCount() {
|
public int getMemberCount() {
|
||||||
return members.size();
|
return members.size();
|
||||||
@@ -28,4 +43,34 @@ public class ChatRoom {
|
|||||||
return members.get(id);
|
return members.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean kickMember(long userId) {
|
||||||
|
if (!(type.equals(ChatRoomType.OPEN_CHAT) || type.equals(ChatRoomType.OPEN_DIRECT))) return false;
|
||||||
|
if (!(getMember(client.getMyUserId()).getMemberType() == MemberType.OWNER || getMember(client.getMyUserId()).getMemberType() == MemberType.ADMIN)) return false;
|
||||||
|
return client.kickMember(chatId, linkId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean kickMember(Member member) {
|
||||||
|
return kickMember(member.getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendMessage(String message) {
|
||||||
|
return client.sendMessage(chatId, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendMessage(String message, String extra) {
|
||||||
|
return client.sendMessage(chatId, message, extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendJpg(byte[] image) {
|
||||||
|
return client.sendJpg(chatId, image); //client.sendImage(chatId, image, extension);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendVideo(String extension, byte[] video) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendFile(String extension, byte[] file) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.github.netricecake.kakao.structs;
|
||||||
|
|
||||||
|
public class ChatRoomType {
|
||||||
|
|
||||||
|
public final static String DIRECT_CHAT = "DirectChat";
|
||||||
|
public final static String GROUP_CHAT = "MultiChat";
|
||||||
|
|
||||||
|
public final static String OPEN_CHAT = "OM";
|
||||||
|
public final static String OPEN_DIRECT = "OD";
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,20 +1,48 @@
|
|||||||
package com.github.netricecake.kakao.structs;
|
package com.github.netricecake.kakao.structs;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.TalkClient;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class Member {
|
public class Member {
|
||||||
|
|
||||||
private long id;
|
private final TalkClient client;
|
||||||
|
|
||||||
private String name;
|
private final ChatRoom chatRoom;
|
||||||
|
|
||||||
private int memberType;
|
private final long userId;
|
||||||
|
|
||||||
public Member(long id, String name, int memberType) {
|
private final int type;
|
||||||
this.id = id;
|
|
||||||
this.name = name;
|
private final String nickName;
|
||||||
|
|
||||||
|
private final String profileImageUrl;
|
||||||
|
|
||||||
|
private final String fullProfileImageUrl;
|
||||||
|
|
||||||
|
private final String originalProfileImageUrl;
|
||||||
|
|
||||||
|
private final long profileLinkId;
|
||||||
|
|
||||||
|
private final int memberType;
|
||||||
|
|
||||||
|
private final int profileType; // 1 실제 프로필, 2 카카오 프로필, 16 오픈 프로필
|
||||||
|
|
||||||
|
public Member(TalkClient client, ChatRoom chatRoom, long userId, int type, String nickName, String profileImageUrl, String fullProfileImageUrl, String originalProfileImageUrl, long profileLinkId, int memberType, int profileType) {
|
||||||
|
this.client = client;
|
||||||
|
this.chatRoom = chatRoom;
|
||||||
|
this.userId = userId;
|
||||||
|
this.type = type;
|
||||||
|
this.nickName = nickName;
|
||||||
|
this.profileImageUrl = profileImageUrl;
|
||||||
|
this.fullProfileImageUrl = fullProfileImageUrl;
|
||||||
|
this.originalProfileImageUrl = originalProfileImageUrl;
|
||||||
|
this.profileLinkId = profileLinkId;
|
||||||
this.memberType = memberType;
|
this.memberType = memberType;
|
||||||
|
this.profileType = profileType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean kick() {
|
||||||
|
return chatRoom.kickMember(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.github.netricecake.kakao.structs;
|
||||||
|
|
||||||
|
public class MemberType {
|
||||||
|
|
||||||
|
public final static int OWNER = 1;
|
||||||
|
public final static int MEMBER = 2;
|
||||||
|
public final static int ADMIN = 4;
|
||||||
|
public final static int BOT = 8;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,29 +1,48 @@
|
|||||||
package com.github.netricecake.kakao.structs;
|
package com.github.netricecake.kakao.structs;
|
||||||
|
|
||||||
|
import com.github.netricecake.kakao.TalkClient;
|
||||||
|
import com.github.netricecake.kakao.loco.LocoPacket;
|
||||||
|
import com.github.netricecake.kakao.packet.inbound.message.WriteIn;
|
||||||
|
import com.github.netricecake.kakao.packet.outbound.message.WriteOut;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class Message {
|
public class Message {
|
||||||
|
|
||||||
private long logId;
|
private final TalkClient client;
|
||||||
|
|
||||||
private ChatRoom chatRoom;
|
private final ChatRoom chatRoom;
|
||||||
|
|
||||||
private Member author;
|
private final long logId;
|
||||||
|
|
||||||
private int type;
|
private final Member author;
|
||||||
|
|
||||||
private String message;
|
private final int type;
|
||||||
|
|
||||||
private String attachment;
|
private final long sendTime;
|
||||||
|
|
||||||
public Message(long logId, ChatRoom chatRoom, Member author, int type, String message, String attachment) {
|
private final String message;
|
||||||
|
|
||||||
|
private final String attachment;
|
||||||
|
|
||||||
|
public Message(TalkClient client, ChatRoom chatRoom, long logId, Member author, int type, long sendTime, String message, String attachment) {
|
||||||
|
this.client = client;
|
||||||
this.logId = logId;
|
this.logId = logId;
|
||||||
this.chatRoom = chatRoom;
|
this.chatRoom = chatRoom;
|
||||||
this.author = author;
|
this.author = author;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
this.sendTime = sendTime;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.attachment = attachment;
|
this.attachment = attachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean reply(String message) {
|
||||||
|
return client.reply(this, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean blind() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.github.netricecake.kakao.structs;
|
||||||
|
|
||||||
|
public class MessageType {
|
||||||
|
|
||||||
|
private MessageType() {};
|
||||||
|
|
||||||
|
public final static int TEXT = 1;
|
||||||
|
public final static int IMAGE = 2;
|
||||||
|
public final static int VIDEO = 3;
|
||||||
|
public final static int FILE = 4;
|
||||||
|
|
||||||
|
public final static int REPLY = 26;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.netricecake.loco.util;
|
package com.github.netricecake.kakao.util;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.netricecake.loco.util;
|
package com.github.netricecake.kakao.util;
|
||||||
|
|
||||||
public class ByteUtil {
|
public class ByteUtil {
|
||||||
|
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package com.github.netricecake.kakao.util;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
public class ImageUtil {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class ImageMeta {
|
||||||
|
private boolean isValidJpeg;
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
|
||||||
|
public ImageMeta(boolean isValidJpeg, int width, int height) {
|
||||||
|
this.isValidJpeg = isValidJpeg;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ImageMeta getImageMeta(byte[] data) {
|
||||||
|
if (data == null || data.length < 4) {
|
||||||
|
return new ImageMeta(false, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
if ((data[i] & 0xFF) != 0xFF || (data[i + 1] & 0xFF) != 0xD8) {
|
||||||
|
return new ImageMeta(false, 0, 0);
|
||||||
|
}
|
||||||
|
i += 2;
|
||||||
|
|
||||||
|
while (i < data.length) {
|
||||||
|
int marker;
|
||||||
|
while ((marker = (data[i] & 0xFF)) != 0xFF) {
|
||||||
|
i++;
|
||||||
|
if (i >= data.length) return new ImageMeta(false, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
marker = data[++i] & 0xFF;
|
||||||
|
} while (marker == 0xFF);
|
||||||
|
i++;
|
||||||
|
if (isSOFMarker(marker)) {
|
||||||
|
|
||||||
|
int height = ((data[i + 3] & 0xFF) << 8) | (data[i + 4] & 0xFF);
|
||||||
|
int width = ((data[i + 5] & 0xFF) << 8) | (data[i + 6] & 0xFF);
|
||||||
|
|
||||||
|
return new ImageMeta(true, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
int length = ((data[i] & 0xFF) << 8) | (data[i + 1] & 0xFF);
|
||||||
|
i += length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ImageMeta(false, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isSOFMarker(int marker) {
|
||||||
|
return marker >= 0xC0 && marker <= 0xCF
|
||||||
|
&& marker != 0xC4 && marker != 0xC8 && marker != 0xCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.etc;
|
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
|
||||||
|
|
||||||
public class PingIn extends InboundPacket {
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.member;
|
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public class MemberIn extends InboundPacket {
|
|
||||||
|
|
||||||
private long userId;
|
|
||||||
|
|
||||||
private String nickName;
|
|
||||||
|
|
||||||
private int memberType = 2;
|
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
|
||||||
userId = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("userId").getAsLong();
|
|
||||||
this.nickName = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("nickName").getAsString();
|
|
||||||
try {
|
|
||||||
memberType = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("mt").getAsInt();
|
|
||||||
} catch (Exception e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.member;
|
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonParser;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public class SyncLinkPfIn extends InboundPacket {
|
|
||||||
|
|
||||||
private long chatId;
|
|
||||||
|
|
||||||
private long linkId;
|
|
||||||
|
|
||||||
private long userId;
|
|
||||||
|
|
||||||
private String nickName;
|
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
|
||||||
chatId = jsonObject.get("c").getAsLong();
|
|
||||||
linkId = jsonObject.get("li").getAsLong();
|
|
||||||
JsonObject olu = jsonObject.get("olu").getAsJsonObject();
|
|
||||||
userId = olu.get("userId").getAsLong();
|
|
||||||
nickName = olu.get("nn").getAsString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
package com.github.netricecake.loco.packet.inbound.room;
|
|
||||||
|
|
||||||
import com.github.netricecake.loco.packet.InboundPacket;
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public class ChatInfoIn extends InboundPacket {
|
|
||||||
|
|
||||||
private String type;
|
|
||||||
|
|
||||||
private JsonArray chatMetas;
|
|
||||||
|
|
||||||
private JsonArray displayMembers;
|
|
||||||
|
|
||||||
private long linkId = 0;
|
|
||||||
|
|
||||||
public void fromBson(byte[] bson) {
|
|
||||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
|
||||||
type = jsonObject.get("chatInfo").getAsJsonObject().get("type").getAsString();
|
|
||||||
try {
|
|
||||||
linkId = jsonObject.get("chatInfo").getAsJsonObject().get("li").getAsLong();
|
|
||||||
} catch (Exception e) {}
|
|
||||||
try {
|
|
||||||
chatMetas = jsonObject.get("chatInfo").getAsJsonObject().get("chatMetas").getAsJsonArray();
|
|
||||||
displayMembers = jsonObject.get("chatInfo").getAsJsonObject().get("displayMembers").getAsJsonArray();
|
|
||||||
} catch (Exception e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package com.github.netricecake.loco.packet.outbound.etc;
|
|
||||||
|
|
||||||
import com.github.netricecake.loco.util.BsonUtil;
|
|
||||||
|
|
||||||
public class PingOut {
|
|
||||||
|
|
||||||
public byte[] toBson() {
|
|
||||||
return BsonUtil.jsonToBson("{}");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user