From 1faf67a97738244b8bb9a5ecee69f38a9720e829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9=E5=A4=95=E9=98=B3?= Date: Mon, 18 Oct 2021 22:07:25 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9APNs=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E5=8C=85=E4=B8=BApushy=202=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E5=92=8C=E5=A2=9E=E5=BC=BASessionGroup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cim-boot-server/cim-boot-server.iml | 147 -- cim-boot-server/cim-boot-server.ipr | 1235 ----------------- cim-boot-server/cim-boot-server.iws | 69 - .../libs/cim-server-sdk-netty-4.0.0.jar | Bin 79382 -> 79800 bytes cim-boot-server/pom.xml | 8 +- .../cim/component/handler/ClosedHandler.java | 3 + .../cim/config/properties/APNsProperties.java | 9 + .../cim/service/impl/APNsServiceImpl.java | 76 +- .../farsunset/cim/util/ApnsPayloadCompat.java | 81 -- .../src/main/resources/application.properties | 3 +- .../cim/sdk/server/group/SessionGroup.java | 4 + .../cim/sdk/server/model/Message.java | 28 +- 12 files changed, 90 insertions(+), 1573 deletions(-) delete mode 100644 cim-boot-server/cim-boot-server.iml delete mode 100644 cim-boot-server/cim-boot-server.ipr delete mode 100644 cim-boot-server/cim-boot-server.iws delete mode 100644 cim-boot-server/src/main/java/com/farsunset/cim/util/ApnsPayloadCompat.java diff --git a/cim-boot-server/cim-boot-server.iml b/cim-boot-server/cim-boot-server.iml deleted file mode 100644 index 41bd885..0000000 --- a/cim-boot-server/cim-boot-server.iml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cim-boot-server/cim-boot-server.ipr b/cim-boot-server/cim-boot-server.ipr deleted file mode 100644 index 0ee9871..0000000 --- a/cim-boot-server/cim-boot-server.ipr +++ /dev/null @@ -1,1235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cim-boot-server/cim-boot-server.iws b/cim-boot-server/cim-boot-server.iws deleted file mode 100644 index 5453894..0000000 --- a/cim-boot-server/cim-boot-server.iws +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1632398352014 - - - - - - \ No newline at end of file diff --git a/cim-boot-server/libs/cim-server-sdk-netty-4.0.0.jar b/cim-boot-server/libs/cim-server-sdk-netty-4.0.0.jar index f446a411f31f49ac3b2d2bb2b7f8ead6e4788af3..8591804d0173c2d6a9c314d2e329ab5aee8e1a8a 100644 GIT binary patch delta 6690 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 R^5Ab-fSGud6Su06{|D(>W3K=J delta 6333 zcmZWt2|QG9_n&Lu#xlmf@B5OOv1M$LeT^(B*~_jhqcFD060&6MWJy#cB1=Nnifmaz z*-Hp%A=gxi3=Xtt8mbpd-H#Z_Bqk$1$xFV%gxG-r5 z_=V0F2`*AP1-bwEAOpW${Cwp8<%5jW9}-OeOGKm#D6w!Ip&b!o1#yo5N(<&ozYZu9 z^QN~0nxvp!IuogE`i3yY|FCpPv>+CU5@uxqiu7kBG?3#ZiOxTOIuj^!%C8DLD+w07 zMh$~$f$8{bBS~$^h?LqXN=*c0@N!O*5_8r5=3xXN4m<#7Di}-y$c-vja=`p4Q&vvTdYf0@paWxAQS+cbC(YcDI zZNc&sC!U?}F7ygO-hW2~^I_$aM`xd)`-8a|DVGcL&dPB(pOw1NKMdL;Aa!RhObATlD9{xle}g^iFrD%srna9Z13wX(d^ zi+Lp;i@d1xAuBzlBvSw*5k766msdtT!BRPTd(>odklVxlv>5V|R{Hzq%W@oyGBRET zW75D@T0*!=@U2lFy%MU67S;scPXp%wmaQ=t63MHt(YubfN8vu=1fI7KoZQg(6KTIn zDF~d$ zF|qM-5bYCd-F;%}tmaz0+*mlf9T@RhNq|CRZmh05-#HeJ5$Nq)G%OOncPyiK6& zXA-H#$AjLNQ}21*p{Dm)Y>cg^T6=dhjmJc)-#C0*7C1iN<&-Hw+b~oxRMSsmyOJA_ z5^(uOWR%-_#O^Ta!_JdVPeRVtY7G;W4F-e`kj`dS)& z$Q!w2^>iB{J1a=JuS@ONA%yrf`A2%WIhugMM{#hJUj|d`S@)puf(EO)1ax<3NaF8?SLBZd1ZG& z24he^emkpp@SdH(kA?P##m!F=hT8U`LyJzUk&1U06-u8RZ#BPoM|jlIrPoqcx7hcm zdwJf)27{7~O!;T>F>jk@Oen847iHxf^Xd0GAoEUYkR28r{@lNW=@ku9#@9Y9jV$Tv zq*PetzyHb8;%8$lJLijJ?2HOVktP1-a@O@opRyHyw!7$M=M!rC(F=h|CQEryHD4@p zos;H6cEaPIDR*m7{n30@R$TcG>GR{x(i0M=a7rH4nw{F#-F=03{y{QwA-9Zm86W(9Uivurr%r$SO+!mbO}`f#n)1$77Vq;) zvix0Uk|XmMct#R~FHd|yqGt+G@AWJgY0)Pbo=%K>z@kTUOHVsT>`xbEVO1b4 z8wi~bn&*z~)YUn8!F)?t^3Bs%Rpnv_G357zx-b(aLVafD<9(&Z%&{x)T19x*+t1~&J-zzXXW2qa9i}pbSB%MN|4}Yc zr?Y3L(INF1>z+4H@6^0_crUon`huwV6w?Xr)mv?E zJ5O;RcgR%Eiv4((@#Y%kscWYLT{NyW(XS4j_)5dQd2v&iM|ee~&rqj|U$l6GranPg zfBQE%JN^aDc*M&a0UQYOb7Hf2fsPX;Z>^XLHQji>$BGO^Fu{dk8#K z*4>o6>|t}dw&wd~b7rzz2TG@PWx4bpUoS$Bd|49}KTEa@12}}m^)8|*RjecPBsF=z z32bzC3-%VcvMRWBv7i}U9ioi0R2uKueAg=P)xMVNfc$v<2W>`rT_Kl{INr1>LIFK{ zy{_wwIn_lBy#@cd4iSk5ajWO!-mlHlUqQu+j%)Fnd`p)}F=4t@-M_Z#`Nl@K%_a>- zM=`6!5{3c)c3W|Q?0O`d*uH+@t%0`|N(C7VIE}tg>x_j-ZTvV=2pi35k0tC6MgP3F znx0-5f!W#d{km=tU$5PbXX7iIi^No%H~CtFv*3MkwlrkA;Y!0Bd!xNjZyp-+5MU|` zJ-?xrvpvBZwISF0;bBIf5b(#IM*R%U{u6V-8N+u{_jr?L>tXnUMV+YUY~#ASCpUMw zHn$WN-e)$_r1fkI;+|6N=)-U&s}x^834fH&E}QCBYVN5v!uZ6i;pYP*2awr@6vl6# z?!iLpdXz9tfv0{i8CytL(w2qf-Y4ypEe=}bMx+S6?2e7Bx#B#rAOY_WPqFB74()WL z+h;i_`urI1+cbN_wX(rGov5^1(y&_+vVg^H;DNu>92JZ>UXe*wafkvi*aY}i`e!Vx zwL`faj#1Ci7KcLk5YkHg5FLKqk7eKv7{u?*NEwSIkKc8NubKL*u~%*25HC4=KnY^1x$;L-K4b9T!C2 z7`T5Zm_KB7XnY&t;ea6II{vVp%nfTQXyT(ylKXw10tRDXg2Cj$iBFWki2~sGhnc&V zk=Beo&ub@VvR~7aIqPg`lZm(v>C%!RGz}K1yq_Wv^woXt2#R2jv1~j3bGQ#Q2{hvT zxH}{-1=>3hb#*&h2YmR)(#;<4eKVcLiZiUrK3v6C?}eZH8TjVUpP#$5F!#Be2^`{; zI1*Fru)iHn+EBW_W@5mZGSP_@Z}u2x*gYbNMzW~ASg555mc%8OzmdXewI|Y?v)p_f zZG&v7oW+n=Z@*BoYKd>KZF$(yc3e`?g)MPL`n}s0Zz5Luy~h@i$Y8hTR+G~Ij+x(`x@_!q&qTWe^{hoeYhW_d!Gm}{Ti{&tRfi~edPx1y`bD_c9sZ(OD+@89U5 z-PgI>R|CoIY2Bu$yqgg2u9xw_0;qe(efuuK<065TT!gs(=Z!Is;6%D;8uu$uN=51$Y#uguk#+aof7(6@PwDfCPDr8e20UyVw z+V#-bdN??Pw4%wHR=xfVS>|uTM~UI;hn*@*r>iI2ZdwG3ZNLpv`+5{_;kg|0dS>&@h&W36It?$8up)O5WY{L^HxrDsFz=&q7{A;Gd z){1=OZxNK)cxph_ojyOGXmDj+uZ9&e&+T9;|8=V8;>uYaNOmuFcOhO^oF_nDjAlS;di zBLjhZ@cu9bT#fs=Yg4>>4b#QzIB&s)y4d=IEm?z4PbvK7-9pxQgRv$2PGMDx${Fro zuxH)X-}uN@uq9?(_>2#+Ah&6@^}9Q8dT-_FCbRGTWCOas7AJUU?(cV>N*j6=>TPZj zEVr9kt;L-fOmN=nAWKdf0dyX|dO5XVoNZXqt9X8h=?AR4A zUF|fp$`cM>%8^{q>B325T1Ra<^<^4(F!AY{UnF}{MfNLI6)DZgFC}j8##lj;rp!UoryCvU*HaGw1--}z@noql_Ap%%wwxv{wT}Fz8-35| zmXeUxm|hHMoOP{jrqIuYO)^ra(ZsC9lTEV2iH1mSI7V}s_Lhko<3$99Sv{E9IEHeyp zDXOft#GBArdEWkfSJPV0A$)~tT8*<~Pu#x^5Lb>91 z3>4czfq4vI(L;m(at`eaMJ181OPe6NEQH8AmgO~fQ1Yi zK|l*4A5#Q42p)nUkr6gcNar8v?3`z#8fwfK&S4OG5=CimCYNl3S3#U?SkaqYEzD z-&bjrrXrzT7EnoNP^BdJO90ILM0&p@ckORh7|g>G1~dB01;0z9zA68uBMF-l03B5G zfdrV{-kgX?rJE+w6WrwhW~eSNNf7b3I7Ilp5a}tF6a;z&FphYs-w{z}&%Y=qK~3r( z#7GK6o_YU8nA2x`;7~rOyc@^~Hg~X_YH}FN{z!Q?(ZrC$Zuq1Dai}~)X;2Jv?NH1# zk(rQk4B&!<23dy`&x1mhppe}WAEII;IJaFlT%bIdi_D*)chV4 zGdvv#SN!PAS1DKg~%I;bca046X69&)bI!C=@US|xXh z5k^o`4052vNy z399no!Vzy(b9qn*UJJ>C_Xb6}Y~4Q#M?~9+DEGi&oM|HR-#bT)wlaSmO!0vf1~WcV z{L8`rh(QYgrFjUh1c|`Np^)q-$Kky}Ou?f7B3f%iM1)D)P@E6^8;ip#q{_ z(Y$L0`&$7QTIL89ASVQ%0Y2yen=p<7SfK_tQD7UCl>Y^-QUT2W@AoO+x!Ows-h^r3 znyVg>{RPG9Lt-sxP|Oxi6q6%RVZiE%D?4jc-8luu-v58G=1c@F3~(5G69dM^un`?{ zgb89S_((r;e$Viqyo|7egIAmcCPjb;+5x}^Bp1mJC*iyj*q@Ig_!}i|5Me|wii_w) r6Z#baNs<`oA7we5kN1B+fQUsN*)jf;i1 - cn.teaey.apns4j - apns4j - 1.1.4 + com.eatthepath + pushy + 0.15.0 commons-io commons-io - 2.6 + 2.7 diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/ClosedHandler.java b/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/ClosedHandler.java index 9886409..cca0b24 100644 --- a/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/ClosedHandler.java +++ b/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/ClosedHandler.java @@ -58,6 +58,9 @@ public class ClosedHandler implements CIMRequestHandler { sessionGroup.remove(channel); + /* + * ios开启了apns也需要显示在线,因此不删记录 + */ if (!Objects.equals(channel.attr(ChannelAttr.CHANNEL).get(), Session.CHANNEL_IOS)){ sessionService.delete(uid,nid); return; diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/config/properties/APNsProperties.java b/cim-boot-server/src/main/java/com/farsunset/cim/config/properties/APNsProperties.java index 82edf5d..c7bdeac 100644 --- a/cim-boot-server/src/main/java/com/farsunset/cim/config/properties/APNsProperties.java +++ b/cim-boot-server/src/main/java/com/farsunset/cim/config/properties/APNsProperties.java @@ -28,6 +28,8 @@ public class APNsProperties { private boolean debug; + private String appId; + private final P12 p12 = new P12(); public static class P12 { @@ -67,6 +69,13 @@ public class APNsProperties { return p12.file; } + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } public String getP12Password() { return p12.password; diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/service/impl/APNsServiceImpl.java b/cim-boot-server/src/main/java/com/farsunset/cim/service/impl/APNsServiceImpl.java index 56ef1c7..6c017b0 100644 --- a/cim-boot-server/src/main/java/com/farsunset/cim/service/impl/APNsServiceImpl.java +++ b/cim-boot-server/src/main/java/com/farsunset/cim/service/impl/APNsServiceImpl.java @@ -21,21 +21,23 @@ */ package com.farsunset.cim.service.impl; -import cn.teaey.apns4j.Apns4j; -import cn.teaey.apns4j.network.ApnsChannel; -import cn.teaey.apns4j.network.ApnsChannelFactory; -import cn.teaey.apns4j.network.ApnsGateway; -import cn.teaey.apns4j.protocol.ApnsPayload; +import com.eatthepath.pushy.apns.ApnsClient; +import com.eatthepath.pushy.apns.ApnsClientBuilder; +import com.eatthepath.pushy.apns.ApnsPushNotification; +import com.eatthepath.pushy.apns.util.ApnsPayloadBuilder; +import com.eatthepath.pushy.apns.util.SimpleApnsPayloadBuilder; +import com.eatthepath.pushy.apns.util.SimpleApnsPushNotification; +import com.eatthepath.pushy.apns.util.TokenUtil; import com.farsunset.cim.config.properties.APNsProperties; import com.farsunset.cim.sdk.server.model.Message; import com.farsunset.cim.service.APNsService; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.io.IOException; import java.io.InputStream; @Service @@ -43,15 +45,19 @@ public class APNsServiceImpl implements APNsService { private static final Logger LOGGER = LoggerFactory.getLogger(APNsServiceImpl.class); - private final ApnsChannelFactory apnsChannelFactory; + private final ApnsClient apnsClient; + + private final APNsProperties properties; @Autowired - public APNsServiceImpl(APNsProperties properties){ + public APNsServiceImpl(APNsProperties properties) throws IOException { + this.properties = properties; + InputStream stream = getClass().getResourceAsStream(properties.getP12File()); - apnsChannelFactory = Apns4j.newChannelFactoryBuilder() - .keyStoreMeta(stream) - .keyStorePwd(properties.getP12Password()) - .apnsGateway(properties.isDebug() ? ApnsGateway.DEVELOPMENT : ApnsGateway.PRODUCTION) + + apnsClient = new ApnsClientBuilder() + .setApnsServer(properties.isDebug() ? ApnsClientBuilder.DEVELOPMENT_APNS_HOST : ApnsClientBuilder.PRODUCTION_APNS_HOST) + .setClientCredentials(stream, properties.getP12Password()) .build(); } @@ -64,29 +70,33 @@ public class APNsServiceImpl implements APNsService { return ; } - ApnsChannel apnsChannel = apnsChannelFactory.newChannel(); - ApnsPayload apnsPayload = new ApnsPayload(); + ApnsPayloadBuilder payloadBuilder = new SimpleApnsPayloadBuilder(); - apnsPayload.alert("您有一条新的消息"); + payloadBuilder.setAlertTitle("您有一条新的消息"); - apnsPayload.sound("default"); - apnsPayload.badge(1); - apnsPayload.extend("id",message.getId()); - apnsPayload.extend("action",message.getAction()); - apnsPayload.extend("content",message.getContent()); - apnsPayload.extend("sender",message.getSender()); - apnsPayload.extend("receiver",message.getReceiver()); - apnsPayload.extend("format",message.getFormat()); - apnsPayload.extend("extra",message.getExtra()); - apnsPayload.extend("timestamp",message.getTimestamp()); + payloadBuilder.setSound("default"); + payloadBuilder.setBadgeNumber(1); + payloadBuilder.addCustomProperty("id",message.getId()); + payloadBuilder.addCustomProperty("action",message.getAction()); + payloadBuilder.addCustomProperty("content",message.getContent()); + payloadBuilder.addCustomProperty("sender",message.getSender()); + payloadBuilder.addCustomProperty("receiver",message.getReceiver()); + payloadBuilder.addCustomProperty("format",message.getFormat()); + payloadBuilder.addCustomProperty("extra",message.getExtra()); + payloadBuilder.addCustomProperty("timestamp",message.getTimestamp()); - try { - apnsChannel.send(deviceToken, apnsPayload); - LOGGER.info("APNs push done.\ndeviceToken : {} \napnsPayload : {}",deviceToken,apnsPayload.toJsonString()); - }catch(Exception exception) { - LOGGER.error("APNs push failed",exception); - }finally { - IOUtils.closeQuietly(apnsChannel); - } + String token = TokenUtil.sanitizeTokenString(deviceToken); + + String payload = payloadBuilder.build(); + + ApnsPushNotification notification = new SimpleApnsPushNotification(token, properties.getAppId(), payload); + + apnsClient.sendNotification(notification).whenComplete((response, cause) -> { + if (response != null) { + LOGGER.info("APNs push done.\ndeviceToken : {} \napnsPayload : {}",deviceToken,payload); + } else { + LOGGER.error("APNs push failed",cause); + } + }); } } diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/util/ApnsPayloadCompat.java b/cim-boot-server/src/main/java/com/farsunset/cim/util/ApnsPayloadCompat.java deleted file mode 100644 index 67b9b7a..0000000 --- a/cim-boot-server/src/main/java/com/farsunset/cim/util/ApnsPayloadCompat.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2013-2019 Xia Jun(3979434@qq.com). - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - *************************************************************************************** - * * - * Website : http://www.farsunset.com * - * * - *************************************************************************************** - */ -package com.farsunset.cim.util; - -import cn.teaey.apns4j.protocol.ApnsPayload; - -public class ApnsPayloadCompat extends ApnsPayload { - - private static final String DATA_FORMAT = "{\"aps\": {\"message\": {\"action\":\"%s\",\"content\":\"%s\",\"sender\":\"%s\",\"receiver\":\"%s\",\"format\":\"%s\"},\"content-available\": 1}}"; - - private String action; - private String content; - private String sender; - private String format; - private String receiver; - - - public String getReceiver() { - return receiver; - } - - public void setReceiver(String receiver) { - this.receiver = receiver; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getSender() { - return sender; - } - - public void setSender(String sender) { - this.sender = sender; - } - - public String getFormat() { - return format; - } - - public void setFormat(String format) { - this.format = format; - } - - @Override - public String toJsonString() { - return String.format(DATA_FORMAT, action, content, sender,receiver,format); - } -} diff --git a/cim-boot-server/src/main/resources/application.properties b/cim-boot-server/src/main/resources/application.properties index d30e95b..e96ed4d 100644 --- a/cim-boot-server/src/main/resources/application.properties +++ b/cim-boot-server/src/main/resources/application.properties @@ -63,7 +63,8 @@ spring.messages.basename=i18n/messages cim.app.port=23456 cim.websocket.port=34567 -#please setting your p12 info. +#please setting your p12 info and appId. cim.apns.p12.file=/apns/app.p12 cim.apns.p12.password=123 cim.apns.debug=false +cim.apns.app-id=com.xxx.xxx.ios diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/group/SessionGroup.java b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/group/SessionGroup.java index 70adcb6..da74249 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/group/SessionGroup.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/group/SessionGroup.java @@ -76,6 +76,10 @@ public class SessionGroup extends ConcurrentHashMap> find(key).stream().filter(matcher).forEach(channel -> channel.writeAndFlush(message)); } + public void write(String key, Message message, Collection excludedSet){ + find(key).stream().filter(channel -> excludedSet == null || !excludedSet.contains(channel.attr(ChannelAttr.UID).get())).forEach(channel -> channel.writeAndFlush(message)); + } + public void write(Message message){ this.write(message.getReceiver(),message); } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/model/Message.java b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/model/Message.java index 9036152..1dab599 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/model/Message.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/model/Message.java @@ -29,7 +29,7 @@ import java.io.Serializable; /** * 消息对象 */ -public class Message implements Serializable, Transportable { +public class Message implements Serializable, Transportable,Cloneable { private static final long serialVersionUID = 1L; @@ -171,30 +171,52 @@ public class Message implements Serializable, Transportable { return txt != null && txt.trim().length() != 0; } + @Override + public Message clone(){ + Message message = new Message(); + message.id = id; + message.action = action; + message.title = title; + message.content = content; + message.sender = sender; + message.receiver = receiver; + message.extra = extra; + message.format = format; + message.timestamp = timestamp; + return message; + } @Override public byte[] getBody() { MessageProto.Model.Builder builder = MessageProto.Model.newBuilder(); builder.setId(id); builder.setAction(action); builder.setSender(sender); - builder.setReceiver(receiver); builder.setTimestamp(timestamp); - /** + /* * 下面字段可能为空 */ + + if (receiver != null){ + builder.setReceiver(receiver); + } + if (content != null) { builder.setContent(content); } + if (title != null) { builder.setTitle(title); } + if (extra != null) { builder.setExtra(extra); } + if (format != null) { builder.setFormat(format); } + return builder.build().toByteArray(); }