From 850298763f4a178ba5f8e4fe4a8841cee524bd3f Mon Sep 17 00:00:00 2001 From: NetRiceCake Date: Tue, 2 Dec 2025 18:00:46 +0900 Subject: [PATCH] add sending image method --- .idea/.gitignore | 8 -- .idea/encodings.xml | 7 -- .idea/misc.xml | 14 --- README.md | 94 ++++++++++-------- ex.png | Bin 39548 -> 59112 bytes .../java/com/github/netricecake/Main.java | 29 ++++-- .../github/netricecake/kakao/KakaoApi.java | 5 +- .../kakao/LocoSocketHandlerImpl.java | 64 ++++++++++-- .../github/netricecake/kakao/TalkClient.java | 86 +++++++++++++--- .../netricecake/kakao/structs/ChatRoom.java | 5 +- .../github/netricecake/loco/LocoPacket.java | 2 + .../github/netricecake/loco/LocoSocket.java | 8 +- .../netricecake/loco/codec/LocoCodec.java | 20 ++-- .../loco/packet/inbound/{ => etc}/PingIn.java | 2 +- .../packet/inbound/{ => login}/CheckInIn.java | 3 +- .../packet/inbound/{ => login}/GetConfIn.java | 3 +- .../inbound/{ => login}/LoginListIn.java | 35 +++---- .../packet/inbound/{ => member}/DelMemIn.java | 2 +- .../loco/packet/inbound/member/MemberIn.java | 18 ++++ .../packet/inbound/{ => member}/NewMemIn.java | 2 +- .../packet/inbound/member/SyncLinkPfIn.java | 29 ++++++ .../inbound/{ => message}/MessageIn.java | 2 +- .../loco/packet/inbound/message/PostIn.java | 20 ++++ .../loco/packet/inbound/message/ShipIn.java | 31 ++++++ .../packet/inbound/{ => message}/WriteIn.java | 2 +- .../packet/inbound/{ => room}/ChatInfoIn.java | 13 ++- .../packet/inbound/{ => room}/InfoLinkIn.java | 2 +- .../packet/outbound/{ => etc}/PingOut.java | 2 +- .../outbound/{ => login}/CheckInOut.java | 2 +- .../outbound/{ => login}/GetConfOut.java | 2 +- .../outbound/{ => login}/LoginListOut.java | 2 +- .../packet/outbound/member/MemberOut.java | 31 ++++++ .../outbound/{ => message}/MessageOut.java | 2 +- .../loco/packet/outbound/message/PostOut.java | 71 +++++++++++++ .../loco/packet/outbound/message/ShipOut.java | 35 +++++++ .../outbound/{ => message}/WriteOut.java | 2 +- .../outbound/{ => room}/ChatInfoOut.java | 2 +- .../outbound/{ => room}/InfoLinkOut.java | 2 +- 38 files changed, 504 insertions(+), 155 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/misc.xml rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => etc}/PingIn.java (65%) rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => login}/CheckInIn.java (94%) rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => login}/GetConfIn.java (90%) rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => login}/LoginListIn.java (59%) rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => member}/DelMemIn.java (93%) create mode 100644 src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => member}/NewMemIn.java (93%) create mode 100644 src/main/java/com/github/netricecake/loco/packet/inbound/member/SyncLinkPfIn.java rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => message}/MessageIn.java (95%) create mode 100644 src/main/java/com/github/netricecake/loco/packet/inbound/message/PostIn.java create mode 100644 src/main/java/com/github/netricecake/loco/packet/inbound/message/ShipIn.java rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => message}/WriteIn.java (87%) rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => room}/ChatInfoIn.java (56%) rename src/main/java/com/github/netricecake/loco/packet/inbound/{ => room}/InfoLinkIn.java (89%) rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => etc}/PingOut.java (73%) rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => login}/CheckInOut.java (94%) rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => login}/GetConfOut.java (91%) rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => login}/LoginListOut.java (97%) create mode 100644 src/main/java/com/github/netricecake/loco/packet/outbound/member/MemberOut.java rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => message}/MessageOut.java (74%) create mode 100644 src/main/java/com/github/netricecake/loco/packet/outbound/message/PostOut.java create mode 100644 src/main/java/com/github/netricecake/loco/packet/outbound/message/ShipOut.java rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => message}/WriteOut.java (93%) rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => room}/ChatInfoOut.java (87%) rename src/main/java/com/github/netricecake/loco/packet/outbound/{ => room}/InfoLinkOut.java (89%) diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index c3f502a..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# 디폴트 무시된 파일 -/shelf/ -/workspace.xml -# 에디터 기반 HTTP 클라이언트 요청 -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index aa00ffa..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index d61b968..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 135000d..096361a 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ 절대 본계정으로 돌려보지마세요. +**device uuid 무조건 바꾸시오.** + ## Example ![ex](./ex.png) @@ -13,48 +15,58 @@ Main.java 파일 참고 ```java TalkClient client = new TalkClient(email, password, deviceName, deviceUuid, new TalkHandler() { - @Override - public void onMessage(Message msg) { - if (msg.getType() != 1) return; // 1이 그냥 채팅, 그냥 채팅만 받기 - if (msg.getMessage().equals("!send")) { - getTalkClient().sendMessage(msg.getChatRoom(), "test"); - } - else if (msg.getMessage().equals("!reply")) { // 답장 - int replyType = 26; // 답장 타입 - JsonObject extraObject = new JsonObject(); - extraObject.addProperty("src_logId", msg.getLogId()); - extraObject.addProperty("src_userId", msg.getAuthor().getId()); - extraObject.addProperty("src_message", msg.getMessage()); - extraObject.addProperty("src_type", msg.getType()); - extraObject.addProperty("src_linkId", msg.getChatRoom().getLinkId()); - getTalkClient().sendMessage(msg.getChatRoom(), replyType, "reply test", extraObject.toString()); - } - else if (msg.getMessage().equals("!mention")) { // 멘션 - JsonObject extraObject = new JsonObject(); - JsonArray mentionArray = new JsonArray(); - JsonObject mentionObject = new JsonObject(); - mentionObject.addProperty("user_id", msg.getAuthor().getId()); - JsonArray pos = new JsonArray(); - pos.add(1); - mentionObject.add("at", pos); - mentionObject.addProperty("len", msg.getAuthor().getName().length()); - mentionArray.add(mentionObject); - extraObject.add("mentions", mentionArray); - getTalkClient().sendMessage(msg.getChatRoom(), 1, "@" + msg.getAuthor().getName(), extraObject.toString()); - } - } + @Override + public void onMessage(Message msg) { + if (msg.getType() != 1) return; // 1이 그냥 채팅, 그냥 채팅만 받기 + if (msg.getMessage().equals("!send")) { + getTalkClient().sendMessage(msg.getChatRoom().getChatId(), "방 : " + msg.getChatRoom().getName() + "\n보낸사람 : " + msg.getAuthor().getName()); + } else if (msg.getMessage().equals("!reply")) { // 답장 + int replyType = 26; // 답장 타입 + JsonObject extraObject = new JsonObject(); + extraObject.addProperty("src_logId", msg.getLogId()); + extraObject.addProperty("src_userId", msg.getAuthor().getId()); + extraObject.addProperty("src_message", msg.getMessage()); + extraObject.addProperty("src_type", msg.getType()); + extraObject.addProperty("src_linkId", msg.getChatRoom().getLinkId()); + getTalkClient().sendMessage(msg.getChatRoom().getChatId(), replyType, "reply test", extraObject.toString()); + } else if (msg.getMessage().equals("!mention")) { // 멘션 + JsonObject extraObject = new JsonObject(); + JsonArray mentionArray = new JsonArray(); + JsonObject mentionObject = new JsonObject(); + mentionObject.addProperty("user_id", msg.getAuthor().getId()); + JsonArray pos = new JsonArray(); + pos.add(1); + mentionObject.add("at", pos); + mentionObject.addProperty("len", msg.getAuthor().getName().length()); + mentionArray.add(mentionObject); + extraObject.add("mentions", mentionArray); + getTalkClient().sendMessage(msg.getChatRoom().getChatId(), 1, "@" + msg.getAuthor().getName(), extraObject.toString()); + } else if (msg.getMessage().equals("!image")) { + byte[] imageBytes = ByteUtil.hexStringToByteArray("FFD8FFE000104A46494600010101006000600000FFDB0043000201010201010202020202020202030503030303030604040305070607070706070708090B0908080A0807070A0D0A0A0B0C0C0C0C07090E0F0D0C0E0B0C0C0CFFDB004301020202030303060303060C0807080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC00011080080008003012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728292A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FDFCA28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28AFC03F811F03FF69AFF0082C67FC14A3F6CED1749FDB3BE2F7C15D13E0A7C429F47D374ED16E2FA6B392D64BFD52DE08A38A0BFB5484451E9E80E03190C858E1812C01FBF9593E0DF1F685F1174D9AF7C3DAD693AED9DB5CCB6734FA75E47751453C4DB6489990901D1B8653C83C102BC67FE09BDFB24F8F3F62BFD9C8782BE227C6CF157C7BD793539EF63F12F882DDA1BB8A0758C25A8DF3CF232214760D24AED995870A1547E77FF00C19B1E263E0CFD95FE3CFC1ED76DB51D37E217C39F89735E78874FBA88A9B1FB4DA4168885B3CC827D2EF1597F8760FEF5007E8C7ECA7FF0514F869FB667C6BF8C9E00F03DEEA975E20F815AE2787FC50B7564D042972CF711FEE5C9FDE2896D2E109C0E6227054AB37BA57E247EC3CDA27EC63FF077F7ED09E028E4D7B4AD23E33F87AE353D22D6532C96FAB6AB73058EB77131E8BB15935708E7210EE8C1C922BF407FE0AE5FF057FF00871FF0497F80F36BDE24B9B6D67C6FAB42CBE19F09C370AB79ABCBC81238E4C76C8DF7E523031B577390A403DB7C25FB617C30F1E7ED23E21F841A378DB43D4FE25F84F4E4D5B57F0FDBCC5EEB4FB666440EF81B461A48832E772F9B1EE037AE7D26BF273FE0D93FD823C67E171F15BF6B2F8C9A19D23E2A7ED11AA4FA858DB4D6FE44961A55CCFF006D96454DD98D6EAE5D5846E32B1D9C0C0E1C8AFD63A0028AFC2BF097FC1CF7E23FD97FFE0A2DFB50D9FC78BCD635EF841E00F185E782FC2BE1EF0AF85EDA4BFB5B98AFEEA18666BA92485361B7B198C8B34CCEF24AA625091C807AB7FC46ADFB2C7FD083FB407FE08F48FF00E59D007EBF515F9E3FF0496FF83863C23FF0575FDAA7C71F0F7C1FF0CFC5FE18D1FC2DA1FF006F59EBBAB5CC2E6F6313C103453C11065B794B4F945134A1D6290E576E2BF43A800A28A2800A28A2800AFE69BF647FD90BF6ABFDA47FE0AD3FB707887F658F8D3A67C27D73C0DF176FDB59B5D5AFEE61D375C8EE755D6FC969A18EDEE61B83098240A93C2CA3ED0C415390DFD2CD7E40FC4DFF00834EAD3E26FEDDFE30F8B0FF00B4578C746F0978E7C77278EB54F0A695A335A5CB4EF7335C044BF4BC015E37B89C4737D9CBC6B2B01C92C403A6BA3FF056CFD96BE04DCDB6CF80DFB49F8D75BD502C1776F241A6B7876CD616DCCC8EBA5C3333C8C9B7018C7E51DC24127EEFE79FF83587C49F113E04FF00C150FF006B8F841F1BF43D534FF8D1E2FB3B2F1BF88249E5B79152782EA479CBB42CD1B19CEBB04A8D1128543107056BF77ABF193E18F8B2F3F676FF0083D0FE2259EBDA1EA090FC79F87B158786EE81511C9141A4E9D70F72727263F3342BD838E7CC038C026800FF0082EF7856FF00E087FC17E7FE09F3F16BC3BAE5ED8EBBE35D7EDFC07770A227971D845AADB47300482499E0D7AEA27F45518C139AF60FDB2FFE0D4CF807FB6A7C7BF1EFC4EF1078EFE3459F8BBC75732DF3797AD59DC5869B3BE0AF951CB68D2F92A4604466C042554A00BB7C7FFE0F2BF0ADFF00C3EF80DFB3BFC75F0F6B97BA378C7E167C42363A2B40885629AEEDFEDCB739607E78A5D1A0DA3041F31B3D057B27ED77FF00075D7ECE5FB197ED27E2FF0085DE23F097C69D575FF04EA0FA66A171A5E85622D1A64FBC233717B0C8CB9E8FE585618652CA43100F8EB505FDBA7FE0D98D734EBABAD5350FDA7BF65EB3F344D0C31DC13A1DAA2801A5678E69349009CA85925B538C13BD801FB43FB09FED8FE18FF8280FEC97E0BF8C1E0E86FEDB40F1A5A493436F7B1ECB8B59619E4B79E17C704C73C32A6E1C36DC8E08AFCD4D57FE0F41FD93F5DD2EE6C6FBE1C7C78BCB2BC89A0B8B79FC3FA3C914F1B02AC8EA7522194824107820D751FF00047BFF0082D0789BFE0A1BFB65CBE00F815FB3F68DE06FD92FC11A5BC53EA92D9A6997BA2CE6277863486DA46B35F326F945B4419821794C9C6DA00F953F62EFF829C7803FE08B5FF053DFF828BB7C68D27C6B16A3E2CF1F45AEE91A668DA5ADD5D5E5A36A7A9CC92E5E48E24578755B3954C8EA1964E0EEC29FBCBE047FC1D55FB16FC6AD274D7BFF00889AC7C3FD5752B8FB3AE95E28F0F5E4535B92D85796E2D927B44439CEE33E00FBDB6BC53FE0BCFF00F04E6F8A9F073F6C0F08FEDE3FB3669F0EA9F103E1D4313F8BBC3E96E649359B5B789E26BADAAC1E60D66C6D668D0893C95428432B1AE3BF66EFDB17FE0965FF000554F83961A7FC57F879F03BE127C43D641D47C43617FA6AF84E54BB46DD2491EB96EB6E24491C960A6E43B8387426803F57FE0EFEDD1F04BF689F159D07E1FF00C62F857E3AD7044D39D3BC3DE2CB0D4EEC46BF79FCA82567DA3B9C6057AA57F343FF000538FD82BFE09FEFFB6AFECB1F0DFF0067FD42DF55B3F8B7E2C8FC35E2A93E1FFC4B8F598F48827BBB3B686776B917FB6766BA7651BD14ADB38284B075FD5BFF008255FF00C1BF3E12FF008247FED4FE2DF1D7803E27F8EB5EF0AF89FC36BA20F0CEBA9039867FB443335E493C2228E56021D918FB3A945965CBB6EE003F40E8A28A0028A28A0028A28A002BF2ABFE0A5FFF0004E5FDA1FE2C7FC1C01FB317ED07F0A74AB67F02F8234FD2F47F146AE356B4B7974DB48F53BF7D4236825712C8B3585F4912F948E496607670D5FAAB45007C63FF0005DBFF00825BEA7FF056EFD8757E1CF87FC47A7F867C4FA16BF6FE26D1A7D415CD85CDCC305CDBF9170C8ACE91B477527CE8AC55954ED61907E9FF00D9F7C2BE26F02FC05F04689E35D723F13F8CB46D02C2C75ED6635DA9AB5FC56F1A5CDC81818124AAEF8C0FBDD0575F450014515F991FB5DFECC3FF00054BF1B7ED27E2FD4FE10FED1BF033C23F0CEEF5077F0E6937BA4466EECACFFE59A4C64D1EE98CA07DE6F39831C9010108A01FA6F5F2DFED53FF000450FD957F6D3F109D63E227C12F07EA5ADCB7525EDCEA9A6ACDA1DFEA13480067B9B8B192096E49C0FF005CCF83C8C126BE09F007ED07FF0005A1F853A1BE87A8FC0CF837F132E2CAE2551E21D56FF4AB79EFD3710AC12D756B38C26065736E8F83F30CF00D3FFE0B6DFF000515FD9C7C79A8E87F18BF607D4FC7339B78A6B46F8756BA97D960DD93F3DE5BFF006ADBCA703EE2B2329FBDD71401F6C7ECD1FF00040AFD917F640F8CBA4FC40F87FF000734FD27C5DA0B349A75F5DEB7AA6A82CE4231E624577732C4241FC2FB7729E54835F6157E40FF00C4477FB53FFD231FF680FF00BFDABFFF0028E8FF00888EFF006A7FFA463FED01FF007FB57FFE51D007EBF515F987FB27FF00C1777F685F8FBFB46F83BC17E2AFF827D7C75F879A0789B53874FBCF12DD9BF7B5D112460A6E66F3F4BB78C4499DCC4CAA7683B433614FE9E500145145001451450014514500145145001451450014514500145145001451450014514500145145001451450014514500145145001451450014514500145145001451450014514500145145001451450014514500145145001451450014514500145145007FFFD9"); // 테스트 jpg 이미지 hex + getTalkClient().sendJpg(msg.getChatRoom().getChatId(), imageBytes, "jpg", 128, 128); + } + } - @Override - public void onNewMember(ChatRoom room, Member member) { - getTalkClient().sendMessage(room, member.getName() + "님이 들어왔습니다."); - } + @Override + public void onNewMember(ChatRoom room, Member member) { + JsonObject extraObject = new JsonObject(); + JsonArray mentionArray = new JsonArray(); + JsonObject mentionObject = new JsonObject(); + mentionObject.addProperty("user_id", member.getId()); + JsonArray pos = new JsonArray(); + pos.add(1); + mentionObject.add("at", pos); + mentionObject.addProperty("len", member.getName().length()); + mentionArray.add(mentionObject); + extraObject.add("mentions", mentionArray); + getTalkClient().sendMessage(room.getChatId(), 1, "@" + member.getName() + "님 안녕하세요.", extraObject.toString()); + } - @Override - public void onDelMember(ChatRoom room, Member member) { - getTalkClient().sendMessage(room, member.getName() + "님이 나갔습니다."); - } - }); -client.connect(); + @Override + public void onDelMember(ChatRoom room, Member member) { + getTalkClient().sendMessage(room.getChatId(), member.getName() + "님이 나갔습니다."); + } +}); ``` ## Usage @@ -62,5 +74,3 @@ client.connect(); 첫 로그인시에 기기등록이 필요합니다. 콘솔창에 방법 나오니 따라하세요. 로그인하면 로그인 정보(토큰 등)가 email_deviceName 폴더 안에 저장됩니다. 서버 연결이 안되면 삭제하고 시도하세요. - -**device uuid 무조건 바꾸시오.** diff --git a/ex.png b/ex.png index e822ddbef22fdd7996c001a7eaf47f58aeec685a..dcf7177efae6f310a245846c4c8b8466596bcedb 100644 GIT binary patch literal 59112 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 literal 39548 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%0As3gw`u|eWXGdE)D^g{rIuATITIXn&+QC95v# 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 { try { while (socket.isAlive()) { - Thread.sleep(10 * 60 * 1000); + Thread.sleep(5 * 60 * 1000); PingOut pingOut = new PingOut(); LocoPacket pingPacket = new LocoPacket("PING", pingOut.toBson()); socket.write(pingPacket); @@ -147,9 +154,9 @@ public class TalkClient { }); } - public boolean sendMessage(ChatRoom room, int type, String message, String extra) { + public boolean sendMessage(long chatId, int type, String message, String extra) { WriteOut wo = new WriteOut(); - wo.setChatId(room.getChatId()); + wo.setChatId(chatId); wo.setType(type); wo.setMessage(message); wo.setExtra(extra); @@ -158,8 +165,59 @@ public class TalkClient { return wi.getStatus() == 0; } - public boolean sendMessage(ChatRoom room, String message) { - return sendMessage(room, 1, message, "{}"); + public boolean sendMessage(long chatId, String message) { + return sendMessage(chatId, 1, message, "{}"); + } + + public boolean sendJpg(long chatId, byte[] image, String format, int width, int height) { + LocoSocket postSocket = null; + try { + MessageDigest md = MessageDigest.getInstance("SHA-1"); + ShipOut so = new ShipOut(); + so.setChatId(chatId); + so.setSize(image.length); + so.setCheckSum(ByteUtil.byteArrayToHexString(md.digest(image))); + ShipIn si = new ShipIn(); + si.fromBson(socket.writeAndRead(new LocoPacket("SHIP", so.toBson())).getBody()); + if (si.getStatus() != 0) return false; + + final CompletableFuture future = new CompletableFuture<>(); + postSocket = new LocoSocket(si.getVhost(), si.getPort(), new LocoSocektHandler() { + @Override + public void onPacket(LocoPacket packet) { + JsonObject jsonObject = BsonUtil.bsonToJsonObject(packet.getBody()); + int status = jsonObject.get("status").getAsInt(); + future.complete(status); + } + }, Executors.newFixedThreadPool(1)); + postSocket.connect(); + + PostOut po = new PostOut(); + po.setUserId(loginData.userId); + po.setKey(si.getKey()); + po.setSize(image.length); + po.setChatId(chatId); + po.setWidth(width); + po.setHeight(height); + + PostIn pi = new PostIn(); + pi.fromBson(postSocket.writeAndRead(new LocoPacket("POST", po.toBson())).getBody()); + if (pi.getStatus() != 0) { + postSocket.close(); + return false; + } + + LocoPacket packet = new LocoPacket("", image); + packet.setRaw(true); + postSocket.write(packet); + int status = future.get(); + postSocket.close(); + return status == 0; + } catch (Exception e) { + } finally { + //if (postSocket != null) postSocket.close(); + } + return false; } } diff --git a/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java b/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java index d84f81f..2c16c50 100644 --- a/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java +++ b/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java @@ -3,6 +3,9 @@ package com.github.netricecake.kakao.structs; import lombok.Getter; import lombok.Setter; +import java.util.HashMap; +import java.util.Map; + @Getter @Setter public class ChatRoom { @@ -15,6 +18,6 @@ public class ChatRoom { private long linkId; - //private Map members = new HashMap<>(); + private Map members = new HashMap<>(); } diff --git a/src/main/java/com/github/netricecake/loco/LocoPacket.java b/src/main/java/com/github/netricecake/loco/LocoPacket.java index c5bdb27..4904b1a 100644 --- a/src/main/java/com/github/netricecake/loco/LocoPacket.java +++ b/src/main/java/com/github/netricecake/loco/LocoPacket.java @@ -7,6 +7,8 @@ import lombok.Setter; @Setter public class LocoPacket { + private boolean raw = false; + private int packetId; private short statusCode; diff --git a/src/main/java/com/github/netricecake/loco/LocoSocket.java b/src/main/java/com/github/netricecake/loco/LocoSocket.java index d56058a..b17ee19 100644 --- a/src/main/java/com/github/netricecake/loco/LocoSocket.java +++ b/src/main/java/com/github/netricecake/loco/LocoSocket.java @@ -12,6 +12,7 @@ import io.netty.handler.codec.bytes.ByteArrayDecoder; import io.netty.handler.codec.bytes.ByteArrayEncoder; import lombok.Getter; +import java.io.IOException; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; @@ -51,7 +52,7 @@ public class LocoSocket { cryptoManager = new CryptoManager(); } - public void connect() { + public void connect() throws IOException { try { byte[] handshakePacket = cryptoManager.generateHandshakeMessage(); eventLoopGroup = new MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory()); @@ -92,7 +93,7 @@ public class LocoSocket { } } }.start(); - } catch (Exception e) { + } catch (InterruptedException e) { handlerPool.execute(() -> { locoSocektHandler.onError(e); }); @@ -128,11 +129,12 @@ public class LocoSocket { } public void close() { + if (!alive) return; handlerPool.execute(() -> { locoSocektHandler.onDisconnect(); }); - channel.close(); eventLoopGroup.shutdownGracefully(); + channel.close(); alive = false; } diff --git a/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java b/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java index 45734a9..764d91f 100644 --- a/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java +++ b/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java @@ -23,14 +23,18 @@ public class LocoCodec extends MessageToMessageCodec { @Override protected void encode(ChannelHandlerContext channelHandlerContext, LocoPacket packet, List list) throws Exception { - byte[] packetId = ByteUtil.intToByteArrayLE(packet.getPacketId()); - byte[] statusCode = ByteUtil.shortToByteArrayLE(packet.getStatusCode()); - byte[] method = new byte[11]; - System.arraycopy(packet.getMethod().getBytes(), 0, method, 0, packet.getMethod().length()); - byte[] bodyType = { packet.getBodyType() }; - byte[] body = packet.getBody(); - byte[] bodyLength = ByteUtil.intToByteArrayLE(body.length); - list.add(ByteUtil.concatBytes(packetId, statusCode, method, bodyType, bodyLength, body)); + if (packet.isRaw()) { + list.add(packet.getBody()); + } else { + byte[] packetId = ByteUtil.intToByteArrayLE(packet.getPacketId()); + byte[] statusCode = ByteUtil.shortToByteArrayLE(packet.getStatusCode()); + byte[] method = new byte[11]; + System.arraycopy(packet.getMethod().getBytes(), 0, method, 0, packet.getMethod().length()); + byte[] bodyType = {packet.getBodyType()}; + byte[] body = packet.getBody(); + byte[] bodyLength = ByteUtil.intToByteArrayLE(body.length); + list.add(ByteUtil.concatBytes(packetId, statusCode, method, bodyType, bodyLength, body)); + } } @Override diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/PingIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/etc/PingIn.java similarity index 65% rename from src/main/java/com/github/netricecake/loco/packet/inbound/PingIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/etc/PingIn.java index 9eda48d..52d8c1d 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/PingIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/etc/PingIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.etc; import com.github.netricecake.loco.packet.InboundPacket; diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/CheckInIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/login/CheckInIn.java similarity index 94% rename from src/main/java/com/github/netricecake/loco/packet/inbound/CheckInIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/login/CheckInIn.java index a96fabd..89f4328 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/CheckInIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/login/CheckInIn.java @@ -1,10 +1,9 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.login; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; import com.google.gson.JsonObject; import lombok.Getter; -import lombok.Setter; @Getter public class CheckInIn extends InboundPacket { diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/GetConfIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/login/GetConfIn.java similarity index 90% rename from src/main/java/com/github/netricecake/loco/packet/inbound/GetConfIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/login/GetConfIn.java index 368fffc..8c36cf2 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/GetConfIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/login/GetConfIn.java @@ -1,10 +1,9 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.login; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; import com.google.gson.JsonObject; import lombok.Getter; -import lombok.Setter; @Getter public class GetConfIn extends InboundPacket { diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/LoginListIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/login/LoginListIn.java similarity index 59% rename from src/main/java/com/github/netricecake/loco/packet/inbound/LoginListIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/login/LoginListIn.java index 7a3b387..7745a21 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/LoginListIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/login/LoginListIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.login; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; @@ -15,7 +15,7 @@ public class LoginListIn extends InboundPacket { private long userId; - private int revision; + private long revision; private String revisionInfo; @@ -23,7 +23,7 @@ public class LoginListIn extends InboundPacket { private long minLogId; - private int sb; + private long sb; private JsonArray chatDatas; @@ -31,7 +31,7 @@ public class LoginListIn extends InboundPacket { private JsonArray kc; - private int mcmRevision; + private long mcmRevision; private long lastTokenId; @@ -46,23 +46,24 @@ public class LoginListIn extends InboundPacket { public void fromBson(byte[] bson) { JsonObject json = BsonUtil.bsonToJsonObject(bson); status = json.get("status").getAsInt(); - try { - userId = json.get("userId").getAsLong(); - revision = json.get("revision").getAsInt(); - revisionInfo = json.get("revisionInfo").getAsString(); + userId = getLongOrNull(json, "userId"); + revision = getLongOrNull(json, "revision"); + revisionInfo = getStringOrNull(json, "revisionInfo"); + minLogId = getLongOrNull(json, "minLogId"); + sb = getLongOrNull(json, "sb"); + mcmRevision = getLongOrNull(json, "mcmRevision"); + lastTokenId = getLongOrNull(json, "lastTokenId"); + lastChatId = getLongOrNull(json, "lastChatId"); + ltk = getLongOrNull(json, "ltk"); + lbk = getLongOrNull(json, "lbk"); + eof = getBoolOrNull(json, "eof"); + + if (status == 0) { rp = Base64.getDecoder().decode(json.get("rp").getAsJsonObject().get("$binary").getAsJsonObject().get("base64").getAsString()); - minLogId = json.get("minLogId").getAsLong(); - sb = json.get("sb").getAsInt(); chatDatas = json.get("chatDatas").getAsJsonArray(); delChatIds = json.get("delChatIds").getAsJsonArray(); kc = json.get("kc").getAsJsonArray(); - mcmRevision = json.get("mcmRevision").getAsInt(); - lastTokenId = json.get("lastTokenId").getAsLong(); - lastChatId = json.get("lastChatId").getAsLong(); - ltk = json.get("ltk").getAsLong(); - lbk = json.get("lbk").getAsLong(); - eof = json.get("eof").getAsBoolean(); - } catch(Exception e) {} + } } } diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/DelMemIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/member/DelMemIn.java similarity index 93% rename from src/main/java/com/github/netricecake/loco/packet/inbound/DelMemIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/member/DelMemIn.java index 63f8d26..e77c49b 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/DelMemIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/member/DelMemIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.member; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java new file mode 100644 index 0000000..11aa415 --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java @@ -0,0 +1,18 @@ +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 String nickName; + + public void fromBson(byte[] bson) { + JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson); + this.nickName = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("nickName").getAsString(); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/NewMemIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/member/NewMemIn.java similarity index 93% rename from src/main/java/com/github/netricecake/loco/packet/inbound/NewMemIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/member/NewMemIn.java index dfe2ebe..a564ae5 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/NewMemIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/member/NewMemIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.member; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/member/SyncLinkPfIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/member/SyncLinkPfIn.java new file mode 100644 index 0000000..3ce5cce --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/member/SyncLinkPfIn.java @@ -0,0 +1,29 @@ +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(); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/MessageIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/message/MessageIn.java similarity index 95% rename from src/main/java/com/github/netricecake/loco/packet/inbound/MessageIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/message/MessageIn.java index ed9cc24..a707a69 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/MessageIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/message/MessageIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.message; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/message/PostIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/message/PostIn.java new file mode 100644 index 0000000..da89fa9 --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/message/PostIn.java @@ -0,0 +1,20 @@ +package com.github.netricecake.loco.packet.inbound.message; + +import com.github.netricecake.loco.util.BsonUtil; +import com.google.gson.JsonObject; +import lombok.Getter; + +@Getter +public class PostIn { + + private int status; + + private long o; + + public void fromBson(byte[] bson) { + JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson); + this.status = jsonObject.get("status").getAsInt(); + this.o = jsonObject.get("o").getAsLong(); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/message/ShipIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/message/ShipIn.java new file mode 100644 index 0000000..1cac516 --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/message/ShipIn.java @@ -0,0 +1,31 @@ +package com.github.netricecake.loco.packet.inbound.message; + +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 ShipIn extends InboundPacket { + + private int status; + + private String key; + + private String vhost; + + private String vhost6; + + private int port; + + public void fromBson(byte[] bson) { + JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson); + status = jsonObject.get("status").getAsInt(); + if (status != 0) return; + key = jsonObject.get("k").getAsString(); + vhost = jsonObject.get("vh").getAsString(); + vhost6 = jsonObject.get("vh6").getAsString(); + port = jsonObject.get("p").getAsInt(); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/WriteIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/message/WriteIn.java similarity index 87% rename from src/main/java/com/github/netricecake/loco/packet/inbound/WriteIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/message/WriteIn.java index c76730c..7ff9ba7 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/WriteIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/message/WriteIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.message; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/ChatInfoIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/room/ChatInfoIn.java similarity index 56% rename from src/main/java/com/github/netricecake/loco/packet/inbound/ChatInfoIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/room/ChatInfoIn.java index 963b5f9..eed81b0 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/ChatInfoIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/room/ChatInfoIn.java @@ -1,7 +1,8 @@ -package com.github.netricecake.loco.packet.inbound; +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; @@ -10,7 +11,11 @@ public class ChatInfoIn extends InboundPacket { private String type; - private long linkId; + private JsonArray chatMetas; + + private JsonArray displayMembers; + + private long linkId = 0; public void fromBson(byte[] bson) { JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson); @@ -18,6 +23,10 @@ public class ChatInfoIn extends InboundPacket { 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) {} } } diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/InfoLinkIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/room/InfoLinkIn.java similarity index 89% rename from src/main/java/com/github/netricecake/loco/packet/inbound/InfoLinkIn.java rename to src/main/java/com/github/netricecake/loco/packet/inbound/room/InfoLinkIn.java index 994d69f..cdd286f 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/InfoLinkIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/room/InfoLinkIn.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.inbound; +package com.github.netricecake.loco.packet.inbound.room; import com.github.netricecake.loco.packet.InboundPacket; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/PingOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/etc/PingOut.java similarity index 73% rename from src/main/java/com/github/netricecake/loco/packet/outbound/PingOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/etc/PingOut.java index a5a5b28..97d6dd0 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/PingOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/etc/PingOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.etc; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/CheckInOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/login/CheckInOut.java similarity index 94% rename from src/main/java/com/github/netricecake/loco/packet/outbound/CheckInOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/login/CheckInOut.java index e7cb8e8..86f1306 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/CheckInOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/login/CheckInOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.login; import com.github.netricecake.kakao.KakaoApi; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/GetConfOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/login/GetConfOut.java similarity index 91% rename from src/main/java/com/github/netricecake/loco/packet/outbound/GetConfOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/login/GetConfOut.java index 7e4fd01..2c48dca 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/GetConfOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/login/GetConfOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.login; import com.github.netricecake.loco.util.BsonUtil; import com.google.gson.JsonObject; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/LoginListOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/login/LoginListOut.java similarity index 97% rename from src/main/java/com/github/netricecake/loco/packet/outbound/LoginListOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/login/LoginListOut.java index b0b8803..0333f00 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/LoginListOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/login/LoginListOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.login; import com.github.netricecake.kakao.KakaoApi; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/member/MemberOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/member/MemberOut.java new file mode 100644 index 0000000..041a877 --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/member/MemberOut.java @@ -0,0 +1,31 @@ +package com.github.netricecake.loco.packet.outbound.member; + +import com.github.netricecake.loco.util.BsonUtil; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MemberOut { + + private long chatId; + + private long memberId; + + public MemberOut(long chatId, long memberId) { + this.chatId = chatId; + this.memberId = memberId; + } + + public byte[] toBson() { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("chatId", chatId); + JsonArray jsonArray = new JsonArray(); + jsonArray.add(memberId); + jsonObject.add("memberIds", jsonArray); + return BsonUtil.jsonObjectToBson(jsonObject); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/MessageOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/message/MessageOut.java similarity index 74% rename from src/main/java/com/github/netricecake/loco/packet/outbound/MessageOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/message/MessageOut.java index bbebade..b1cb546 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/MessageOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/message/MessageOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.message; import com.github.netricecake.loco.util.BsonUtil; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/message/PostOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/message/PostOut.java new file mode 100644 index 0000000..20c819b --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/message/PostOut.java @@ -0,0 +1,71 @@ +package com.github.netricecake.loco.packet.outbound.message; + +import com.github.netricecake.kakao.KakaoApi; +import com.github.netricecake.loco.util.BsonUtil; +import com.google.gson.JsonObject; +import lombok.Getter; +import lombok.Setter; + +import java.security.SecureRandom; + +@Getter +@Setter +public class PostOut { + + private long userId; + + private String key; + + private int type = 2; + + private long size; + + private long chatId; + + private long msgId = new SecureRandom().nextLong(); + + private long width; + + private long height; + + private String MCCMNC = KakaoApi.MCCMNC; + + private int nType = KakaoApi.NETWORK_TYPE; + + private String os = KakaoApi.AGENT; + + private String version = KakaoApi.VERSION; + + private String ex = "{\"cmt\":\"\"}"; + + private boolean ns = false; + + private long dt = 4; + + private long scp = 1; + + public byte[] toBson() { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("u", userId); + jsonObject.addProperty("k", key); + jsonObject.addProperty("t", type); + jsonObject.addProperty("s", size); + jsonObject.addProperty("c", chatId); + jsonObject.addProperty("mid", msgId); + jsonObject.addProperty("w", width); + jsonObject.addProperty("h", height); + jsonObject.addProperty("mm", MCCMNC); + jsonObject.addProperty("nt", nType); + jsonObject.addProperty("os", os); + jsonObject.addProperty("av", version); + jsonObject.addProperty("ex", ex); + jsonObject.add("f", null); + jsonObject.add("sp", null); + jsonObject.addProperty("ns", ns); + jsonObject.addProperty("dt", dt); + jsonObject.addProperty("scp", scp); + + return BsonUtil.jsonObjectToBson(jsonObject); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/message/ShipOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/message/ShipOut.java new file mode 100644 index 0000000..3c1c640 --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/message/ShipOut.java @@ -0,0 +1,35 @@ +package com.github.netricecake.loco.packet.outbound.message; + +import com.github.netricecake.loco.util.BsonUtil; +import com.google.gson.JsonObject; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ShipOut { + + private long chatId; + + private long size; + + private int type = 2; + + private String checkSum; + + private String extension = "jpg"; + + private String extensions = "{}"; + + public byte[] toBson() { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("c", chatId); + jsonObject.addProperty("s", size); + jsonObject.addProperty("t", type); + jsonObject.addProperty("cs", checkSum); + jsonObject.addProperty("e", extension); + jsonObject.addProperty("ex", extensions); + return BsonUtil.jsonObjectToBson(jsonObject); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/WriteOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/message/WriteOut.java similarity index 93% rename from src/main/java/com/github/netricecake/loco/packet/outbound/WriteOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/message/WriteOut.java index cbaad6f..d194386 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/WriteOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/message/WriteOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.message; import com.github.netricecake.loco.util.BsonUtil; import com.google.gson.JsonObject; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/ChatInfoOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/room/ChatInfoOut.java similarity index 87% rename from src/main/java/com/github/netricecake/loco/packet/outbound/ChatInfoOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/room/ChatInfoOut.java index 1588512..cb9a7c6 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/ChatInfoOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/room/ChatInfoOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.room; import com.github.netricecake.loco.util.BsonUtil; import com.google.gson.JsonObject; diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/InfoLinkOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/room/InfoLinkOut.java similarity index 89% rename from src/main/java/com/github/netricecake/loco/packet/outbound/InfoLinkOut.java rename to src/main/java/com/github/netricecake/loco/packet/outbound/room/InfoLinkOut.java index 9406749..e2e1960 100644 --- a/src/main/java/com/github/netricecake/loco/packet/outbound/InfoLinkOut.java +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/room/InfoLinkOut.java @@ -1,4 +1,4 @@ -package com.github.netricecake.loco.packet.outbound; +package com.github.netricecake.loco.packet.outbound.room; import com.github.netricecake.loco.util.BsonUtil; import com.google.gson.JsonArray;