mirror of
https://gitee.com/farsunset/cim.git
synced 2025-06-17 07:35:25 +08:00
年前最后一个版本更新3.8.0
This commit is contained in:
parent
91cde7abed
commit
f3b7ec63e0
12
.gitignore
vendored
12
.gitignore
vendored
@ -1,12 +0,0 @@
|
||||
*.class
|
||||
|
||||
*.dex
|
||||
|
||||
*.bak
|
||||
|
||||
*.apk
|
||||
|
||||
.fatjar
|
||||
bin/
|
||||
build/
|
||||
classes/
|
14
README.md
14
README.md
@ -79,4 +79,18 @@ CIM是基于mina或者netty框架下的推送系统,我们平常使用第三
|
||||
|
||||
1.android sdk 优化,使用protobuf-lite版本替代较为臃肿的protobut-java版本
|
||||
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
版本:3.8.0/时间:2020-01-17
|
||||
|
||||
1.服务端sdk将websocket的服务端口和原生socket的端口分离,可以禁用其中一个或者同时启用
|
||||
|
||||
2.web端的sdk简化流程不再需要心跳响应,修改了连接成功回调方法名称和创建连接方法名
|
||||
|
||||
3.andoid sdk修改几个广播action的名称以及回调方法名称,详见cim-client-android工程
|
||||
|
||||
4.所有sdk均使用maven构建,idea工具开发,发现多处代码单词拼写错误,使用阿里语法检测组件优化了部分代码
|
||||
|
||||
5.同步修改了文档
|
||||
|
||||
|
2
cim-boot-server/.gitignore
vendored
Normal file
2
cim-boot-server/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target/
|
||||
.idea/
|
@ -25,55 +25,56 @@
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.22" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.22" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.22" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.17.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.1.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.29" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.29" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.29" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.29" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.2.RELEASE" level="project" />
|
||||
<orderEntry type="module-library">
|
||||
<library name="Maven: com.farsunset:cim-server-sdk:3.7.0">
|
||||
<library name="Maven: com.farsunset:cim-server-sdk:3.8.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$MODULE_DIR$/lib/cim-server-sdk-netty-3.7.0.jar!/" />
|
||||
<root url="jar://$MODULE_DIR$/libs/cim-server-sdk-netty-3.8.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" name="Maven: org.apache.mina:mina-core:2.1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.29" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.35.Final" level="project" />
|
||||
@ -81,7 +82,7 @@
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.9.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: cn.teaey.apns4j:apns4j:1.1.4" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
|
||||
|
@ -15,6 +15,7 @@
|
||||
</component>
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
</component>
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="InspectionProjectProfileManager">
|
||||
@ -110,92 +111,92 @@
|
||||
<root url="jar://$MAVEN_REPOSITORY$/cn/teaey/apns4j/apns4j/1.1.4/apns4j-1.1.4-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0">
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9">
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9">
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9">
|
||||
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9">
|
||||
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.9">
|
||||
<library name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.1/jackson-module-parameter-names-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.1/jackson-module-parameter-names-2.10.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.9/jackson-module-parameter-names-2.9.9-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.1/jackson-module-parameter-names-2.10.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml:classmate:1.4.0">
|
||||
<library name="Maven: com.fasterxml:classmate:1.5.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.4.0/classmate-1.4.0.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.4.0/classmate-1.4.0-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.5.1/classmate-1.5.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.4.0/classmate-1.4.0-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.5.1/classmate-1.5.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.google.protobuf:protobuf-java:3.9.1">
|
||||
<library name="Maven: com.google.protobuf:protobuf-java:3.11.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.9.1/protobuf-java-3.9.1.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.11.1/protobuf-java-3.11.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.9.1/protobuf-java-3.9.1-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.11.1/protobuf-java-3.11.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.9.1/protobuf-java-3.9.1-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.11.1/protobuf-java-3.11.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: commons-io:commons-io:2.6">
|
||||
@ -286,26 +287,26 @@
|
||||
<root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.35.Final/netty-transport-4.1.35.Final-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: javax.annotation:javax.annotation-api:1.3.2">
|
||||
<library name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: javax.validation:validation-api:2.0.1.Final">
|
||||
<library name="Maven: jakarta.validation:jakarta.validation-api:2.0.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.commons:commons-lang3:3.8.1">
|
||||
@ -319,26 +320,26 @@
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.logging.log4j:log4j-api:2.11.2">
|
||||
<library name="Maven: org.apache.logging.log4j:log4j-api:2.12.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.11.2/log4j-api-2.11.2-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2">
|
||||
<library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.11.2/log4j-to-slf4j-2.11.2-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.mina:mina-core:2.1.3">
|
||||
@ -352,290 +353,301 @@
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/mina/mina-core/2.1.3/mina-core-2.1.3-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.22">
|
||||
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.29">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.22/tomcat-embed-core-9.0.22.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.29/tomcat-embed-core-9.0.29.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.22/tomcat-embed-core-9.0.22-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.29/tomcat-embed-core-9.0.29-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.22/tomcat-embed-core-9.0.22-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.29/tomcat-embed-core-9.0.29-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.22">
|
||||
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.29">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.22/tomcat-embed-el-9.0.22.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.29/tomcat-embed-el-9.0.29.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.22/tomcat-embed-el-9.0.22-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.29/tomcat-embed-el-9.0.29-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.22/tomcat-embed-el-9.0.22-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.29/tomcat-embed-el-9.0.29-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.22">
|
||||
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.29">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.22/tomcat-embed-websocket-9.0.22.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.29/tomcat-embed-websocket-9.0.29.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.22/tomcat-embed-websocket-9.0.22-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.29/tomcat-embed-websocket-9.0.29-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.22/tomcat-embed-websocket-9.0.22-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.29/tomcat-embed-websocket-9.0.29-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.freemarker:freemarker:2.3.28">
|
||||
<library name="Maven: org.freemarker:freemarker:2.3.29">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/freemarker/freemarker/2.3.28/freemarker-2.3.28.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/freemarker/freemarker/2.3.29/freemarker-2.3.29.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/freemarker/freemarker/2.3.28/freemarker-2.3.28-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/freemarker/freemarker/2.3.29/freemarker-2.3.29-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/freemarker/freemarker/2.3.28/freemarker-2.3.28-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/freemarker/freemarker/2.3.29/freemarker-2.3.29-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.hibernate.validator:hibernate-validator:6.0.17.Final">
|
||||
<library name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.18.Final/hibernate-validator-6.0.18.Final.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.18.Final/hibernate-validator-6.0.18.Final-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/validator/hibernate-validator/6.0.18.Final/hibernate-validator-6.0.18.Final-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final">
|
||||
<library name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.26">
|
||||
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.29">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.26/jul-to-slf4j-1.7.26-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.slf4j:slf4j-api:1.7.26">
|
||||
<library name="Maven: org.slf4j:slf4j-api:1.7.29">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.29.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.29-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.29-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.1.7.RELEASE/spring-boot-autoconfigure-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.2.RELEASE/spring-boot-autoconfigure-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.1.7.RELEASE/spring-boot-autoconfigure-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.2.RELEASE/spring-boot-autoconfigure-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.1.7.RELEASE/spring-boot-autoconfigure-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.2.RELEASE/spring-boot-autoconfigure-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-freemarker/2.1.7.RELEASE/spring-boot-starter-freemarker-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-freemarker/2.2.2.RELEASE/spring-boot-starter-freemarker-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-freemarker/2.1.7.RELEASE/spring-boot-starter-freemarker-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-freemarker/2.2.2.RELEASE/spring-boot-starter-freemarker-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-freemarker/2.1.7.RELEASE/spring-boot-starter-freemarker-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-freemarker/2.2.2.RELEASE/spring-boot-starter-freemarker-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.1.7.RELEASE/spring-boot-starter-json-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.2.2.RELEASE/spring-boot-starter-json-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.1.7.RELEASE/spring-boot-starter-json-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.2.2.RELEASE/spring-boot-starter-json-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.1.7.RELEASE/spring-boot-starter-json-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.2.2.RELEASE/spring-boot-starter-json-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.1.7.RELEASE/spring-boot-starter-logging-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.2.RELEASE/spring-boot-starter-logging-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.1.7.RELEASE/spring-boot-starter-logging-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.2.RELEASE/spring-boot-starter-logging-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.1.7.RELEASE/spring-boot-starter-logging-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.2.RELEASE/spring-boot-starter-logging-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.1.7.RELEASE/spring-boot-starter-tomcat-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.2.2.RELEASE/spring-boot-starter-tomcat-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.1.7.RELEASE/spring-boot-starter-tomcat-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.2.2.RELEASE/spring-boot-starter-tomcat-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.1.7.RELEASE/spring-boot-starter-tomcat-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.2.2.RELEASE/spring-boot-starter-tomcat-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.1.7.RELEASE/spring-boot-starter-web-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-validation/2.2.2.RELEASE/spring-boot-starter-validation-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.1.7.RELEASE/spring-boot-starter-web-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-validation/2.2.2.RELEASE/spring-boot-starter-validation-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.1.7.RELEASE/spring-boot-starter-web-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-validation/2.2.2.RELEASE/spring-boot-starter-validation-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.1.7.RELEASE/spring-boot-starter-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.2.2.RELEASE/spring-boot-starter-web-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.1.7.RELEASE/spring-boot-starter-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.2.2.RELEASE/spring-boot-starter-web-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.1.7.RELEASE/spring-boot-starter-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.2.2.RELEASE/spring-boot-starter-web-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework.boot:spring-boot:2.1.7.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot-starter:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.1.7.RELEASE/spring-boot-2.1.7.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.2.RELEASE/spring-boot-starter-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.1.7.RELEASE/spring-boot-2.1.7.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.2.RELEASE/spring-boot-starter-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.1.7.RELEASE/spring-boot-2.1.7.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.2.RELEASE/spring-boot-starter-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-aop:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework.boot:spring-boot:2.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.2.RELEASE/spring-boot-2.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.2.RELEASE/spring-boot-2.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.1.9.RELEASE/spring-aop-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.2.RELEASE/spring-boot-2.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-beans:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-aop:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.2.RELEASE/spring-aop-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.2.RELEASE/spring-aop-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.9.RELEASE/spring-beans-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.2.RELEASE/spring-aop-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-context-support:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-beans:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.9.RELEASE/spring-context-support-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.2.RELEASE/spring-beans-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.9.RELEASE/spring-context-support-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.2.RELEASE/spring-beans-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.1.9.RELEASE/spring-context-support-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.2.RELEASE/spring-beans-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-context:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-context-support:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.2.2.RELEASE/spring-context-support-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.2.2.RELEASE/spring-context-support-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.1.9.RELEASE/spring-context-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/5.2.2.RELEASE/spring-context-support-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-core:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-context:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.2.RELEASE/spring-context-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.2.RELEASE/spring-context-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.1.9.RELEASE/spring-core-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.2.RELEASE/spring-context-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-expression:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-core:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.2.RELEASE/spring-core-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.2.RELEASE/spring-core-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.1.9.RELEASE/spring-expression-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.2.RELEASE/spring-core-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-jcl:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-expression:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.2.RELEASE/spring-expression-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.2.RELEASE/spring-expression-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.1.9.RELEASE/spring-jcl-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.2.RELEASE/spring-expression-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-web:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-jcl:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.2.RELEASE/spring-jcl-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.2.RELEASE/spring-jcl-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.1.9.RELEASE/spring-web-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.2.RELEASE/spring-jcl-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.springframework:spring-webmvc:5.1.9.RELEASE">
|
||||
<library name="Maven: org.springframework:spring-web:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.2.2.RELEASE/spring-web-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.2.2.RELEASE/spring-web-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.1.9.RELEASE/spring-webmvc-5.1.9.RELEASE-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.2.2.RELEASE/spring-web-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.yaml:snakeyaml:1.23">
|
||||
<library name="Maven: org.springframework:spring-webmvc:5.2.2.RELEASE">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.2.2.RELEASE/spring-webmvc-5.2.2.RELEASE.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.23/snakeyaml-1.23-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.2.2.RELEASE/spring-webmvc-5.2.2.RELEASE-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.23/snakeyaml-1.23-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.2.2.RELEASE/spring-webmvc-5.2.2.RELEASE-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.yaml:snakeyaml:1.25">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.25/snakeyaml-1.25.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.25/snakeyaml-1.25-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.25/snakeyaml-1.25-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
|
@ -1,8 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AnalysisUIOptions">
|
||||
<option name="GROUP_BY_SEVERITY" value="true" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="bed47126-03b3-4370-a6c1-08503492974f" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
@ -18,30 +20,21 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>CIMWebBridge</find>
|
||||
<find>cim-server-sdk-mina-3.7.0.jar</find>
|
||||
<find>cim.server.port</find>
|
||||
<find>memorySessionService</find>
|
||||
<find>Logger</find>
|
||||
</findStrings>
|
||||
<replaceStrings>
|
||||
<replace>CIMPushManager</replace>
|
||||
</replaceStrings>
|
||||
<dirStrings>
|
||||
<dir>C:\Users\Administrator\Documents\cim\cim-boot-server\src\main\resources</dir>
|
||||
</dirStrings>
|
||||
</component>
|
||||
<component name="ProjectId" id="1PxWQToGq56jcmMz176UjXWLSaU" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showExcludedFiles" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="RequestMappingsPanelOrder0" value="0" />
|
||||
<property name="RequestMappingsPanelOrder1" value="1" />
|
||||
<property name="RequestMappingsPanelWidth0" value="75" />
|
||||
<property name="RequestMappingsPanelWidth1" value="75" />
|
||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="aspect.path.notification.shown" value="true" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/lib" />
|
||||
<property name="node.js.detected.package.eslint" value="true" />
|
||||
<property name="node.js.detected.package.tslint" value="true" />
|
||||
<property name="node.js.path.for.package.eslint" value="project" />
|
||||
@ -55,23 +48,12 @@
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="C:\Users\Administrator\Documents\gitee-cim\cim-boot-server\lib" />
|
||||
<recent name="$PROJECT_DIR$/lib" />
|
||||
<recent name="C:\Users\Administrator\Documents\cim\cim-boot-server\cim-boot-server\cim-boot-server" />
|
||||
<recent name="C:\Users\Administrator\Documents\cim\cim-boot-server\cim-boot-server\cim-boot-server\src" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration name="ServerLauncher" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
|
||||
<module name="cim-boot-server" />
|
||||
@ -92,6 +74,18 @@
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="ServiceViewManager">
|
||||
<option name="viewStates">
|
||||
<list>
|
||||
<serviceView>
|
||||
<treeState>
|
||||
<expand />
|
||||
<select />
|
||||
</treeState>
|
||||
</serviceView>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
@ -119,12 +113,84 @@
|
||||
<workItem from="1566816214034" duration="698000" />
|
||||
<workItem from="1567410257659" duration="115000" />
|
||||
<workItem from="1568597528002" duration="523000" />
|
||||
<workItem from="1579076046499" duration="14355000" />
|
||||
<workItem from="1579226829168" duration="8852000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="WindowStateProjectService">
|
||||
<state x="627" y="209" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1579149988674">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="627" y="209" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1579149988674" />
|
||||
<state x="690" y="218" key="FileChooserDialogImpl" timestamp="1579230010253">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="690" y="218" key="FileChooserDialogImpl/0.0.1920.1040@0.0.1920.1040" timestamp="1579230010253" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.bottom" timestamp="1579243696749">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696749" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.center" timestamp="1579243696749">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.center/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696749" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.left" timestamp="1579243696749">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.left/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696749" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.right" timestamp="1579243696749">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696749" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.bottom" timestamp="1579243696751">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696751" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.center" timestamp="1579243696750">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.center/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696750" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.left" timestamp="1579243696749">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.left/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696749" />
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.right" timestamp="1579243696751">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="615" key="GridCell.Tab.1.right/0.0.1920.1040@0.0.1920.1040" timestamp="1579243696751" />
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.bottom" timestamp="1579156159339">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1579156159339" />
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.center" timestamp="1579156159339">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.center/0.0.1920.1040@0.0.1920.1040" timestamp="1579156159339" />
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.left" timestamp="1579156159339">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.left/0.0.1920.1040@0.0.1920.1040" timestamp="1579156159339" />
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.right" timestamp="1579156159339">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state width="1867" height="386" key="GridCell.Tab.2.right/0.0.1920.1040@0.0.1920.1040" timestamp="1579156159339" />
|
||||
<state x="574" y="193" width="771" height="654" key="find.popup" timestamp="1579242964438">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="574" y="193" width="771" height="654" key="find.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1579242964438" />
|
||||
<state x="161" y="163" key="new project wizard" timestamp="1579242569030">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="161" y="163" key="new project wizard/0.0.1920.1040@0.0.1920.1040" timestamp="1579242569030" />
|
||||
<state x="539" y="5" width="840" height="1034" key="search.everywhere.popup" timestamp="1579235575382">
|
||||
<screen x="0" y="0" width="1920" height="1040" />
|
||||
</state>
|
||||
<state x="539" y="5" width="840" height="1034" key="search.everywhere.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1579235575382" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
@ -133,6 +199,11 @@
|
||||
<line>72</line>
|
||||
<option name="timeStamp" value="5" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="java-line">
|
||||
<url>jar://$PROJECT_DIR$/lib/cim-server-sdk-netty-3.7.0.jar!/com/farsunset/cim/sdk/server/coder/WebMessageEncoder.class</url>
|
||||
<line>22</line>
|
||||
<option name="timeStamp" value="10" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
</breakpoint-manager>
|
||||
</component>
|
||||
|
Binary file not shown.
Binary file not shown.
BIN
cim-boot-server/libs/cim-server-sdk-mina-3.8.0.jar
Normal file
BIN
cim-boot-server/libs/cim-server-sdk-mina-3.8.0.jar
Normal file
Binary file not shown.
BIN
cim-boot-server/libs/cim-server-sdk-netty-3.8.0.jar
Normal file
BIN
cim-boot-server/libs/cim-server-sdk-netty-3.8.0.jar
Normal file
Binary file not shown.
@ -11,7 +11,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.1.7.RELEASE</version>
|
||||
<version>2.2.2.RELEASE</version>
|
||||
<relativePath/>
|
||||
</parent>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<java.version>1.8</java.version>
|
||||
<netty.version>4.1.35.Final</netty.version>
|
||||
<mina.version>2.1.3</mina.version>
|
||||
<protobuf.version>3.9.1</protobuf.version>
|
||||
<protobuf.version>3.11.1</protobuf.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
@ -39,10 +39,10 @@
|
||||
<dependency>
|
||||
<groupId>com.farsunset</groupId>
|
||||
<artifactId>cim-server-sdk</artifactId>
|
||||
<version>3.7.0</version>
|
||||
<version>3.8.0</version>
|
||||
<scope>system</scope>
|
||||
<!-- mina 、netty版本 sdk任选其一 -->
|
||||
<systemPath>${project.basedir}/lib/cim-server-sdk-netty-3.7.0.jar</systemPath>
|
||||
<systemPath>${project.basedir}/libs/cim-server-sdk-netty-3.8.0.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
|
||||
@ -128,13 +128,4 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spring-releases</id>
|
||||
<name>Spring Releases</name>
|
||||
<url>https://repo.spring.io/release</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
</project>
|
@ -34,22 +34,7 @@ import org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReacti
|
||||
import org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration;
|
||||
|
||||
/**
|
||||
*
|
||||
* 其中@SpringBootApplication申明让spring boot自动给程序进行必要的配置,
|
||||
* 等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@EnableAutoConfiguration(exclude = { WebSocketMessagingAutoConfiguration.class,
|
||||
WebSocketReactiveAutoConfiguration.class,
|
||||
WebSocketServletAutoConfiguration.class,
|
||||
WebServicesAutoConfiguration.class,
|
||||
JmxAutoConfiguration.class,
|
||||
DataSourceAutoConfiguration.class,
|
||||
ValidationAutoConfiguration.class,
|
||||
WebClientAutoConfiguration.class,
|
||||
JacksonAutoConfiguration.class })
|
||||
|
||||
public class ServerLauncher {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ServerLauncher.class, args);
|
||||
|
@ -22,6 +22,7 @@
|
||||
package com.farsunset.cim.admin.controller;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
@ -29,13 +30,13 @@ import org.springframework.web.servlet.ModelAndView;
|
||||
@Controller
|
||||
public class NavigationController {
|
||||
|
||||
@RequestMapping(value = "/", method = RequestMethod.GET)
|
||||
@GetMapping(value = "/")
|
||||
public ModelAndView index(ModelAndView model) {
|
||||
model.setViewName("console/index");
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/webclient", method = RequestMethod.GET)
|
||||
@GetMapping(value = "/webclient")
|
||||
public ModelAndView webclient(ModelAndView model) {
|
||||
model.setViewName("console/webclient/index");
|
||||
return model;
|
||||
|
@ -24,6 +24,7 @@ package com.farsunset.cim.admin.controller;
|
||||
import com.farsunset.cim.service.CIMSessionService;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -35,7 +36,7 @@ public class SessionController {
|
||||
@Resource
|
||||
private CIMSessionService cimSessionService;
|
||||
|
||||
@RequestMapping(value = "/list")
|
||||
@GetMapping(value = "/list")
|
||||
public String list(Model model) {
|
||||
model.addAttribute("sessionList", cimSessionService.list());
|
||||
return "console/session/manage";
|
||||
|
@ -24,6 +24,7 @@ package com.farsunset.cim.api.controller;
|
||||
import com.farsunset.cim.api.controller.dto.MessageResult;
|
||||
import com.farsunset.cim.push.DefaultMessagePusher;
|
||||
import com.farsunset.cim.sdk.server.model.Message;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@ -44,13 +45,13 @@ public class MessageController {
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/dispatch",method=RequestMethod.POST)
|
||||
@PostMapping(value = "/dispatch")
|
||||
public MessageResult dispatchSend(Message message) {
|
||||
return send(message);
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/send",method=RequestMethod.POST)
|
||||
@PostMapping(value = "/send")
|
||||
public MessageResult send(Message message) {
|
||||
|
||||
MessageResult result = new MessageResult();
|
||||
|
@ -38,11 +38,15 @@ public class CIMConfig implements CIMRequestHandler, ApplicationListener<Applica
|
||||
}
|
||||
|
||||
@Bean(destroyMethod = "destroy")
|
||||
public CIMNioSocketAcceptor getNioSocketAcceptor(@Value("${cim.server.port}") int port) {
|
||||
CIMNioSocketAcceptor nioSocketAcceptor = new CIMNioSocketAcceptor();
|
||||
nioSocketAcceptor.setPort(port);
|
||||
nioSocketAcceptor.setAppSentBodyHandler(this);
|
||||
return nioSocketAcceptor;
|
||||
public CIMNioSocketAcceptor getNioSocketAcceptor(@Value("${cim.app.port}") int port,
|
||||
@Value("${cim.websocket.port}") int websocketPort) {
|
||||
|
||||
return new CIMNioSocketAcceptor.Builder()
|
||||
.setAppPort(port)
|
||||
.setWebsocketPort(websocketPort)
|
||||
.setOuterRequestHandler(this)
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -32,6 +32,7 @@ import com.farsunset.cim.service.CIMSessionService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -57,11 +58,12 @@ public class BindHandler implements CIMRequestHandler {
|
||||
@Resource
|
||||
private CIMMessagePusher defaultMessagePusher;
|
||||
|
||||
@Override
|
||||
public void process(CIMSession newSession, SentBody body) {
|
||||
|
||||
ReplyBody reply = new ReplyBody();
|
||||
reply.setKey(body.getKey());
|
||||
reply.setCode(CIMConstant.ReturnCode.CODE_200);
|
||||
reply.setCode(HttpStatus.OK.value());
|
||||
reply.setTimestamp(System.currentTimeMillis());
|
||||
|
||||
try {
|
||||
@ -72,7 +74,7 @@ public class BindHandler implements CIMRequestHandler {
|
||||
newSession.setHost(host);
|
||||
newSession.setChannel(body.get("channel"));
|
||||
newSession.setDeviceModel(body.get("device"));
|
||||
newSession.setClientVersion(body.get("version"));
|
||||
newSession.setClientVersion(body.get("appVersion"));
|
||||
newSession.setSystemVersion(body.get("osVersion"));
|
||||
newSession.setBindTime(System.currentTimeMillis());
|
||||
/*
|
||||
@ -102,7 +104,7 @@ public class BindHandler implements CIMRequestHandler {
|
||||
|
||||
|
||||
} catch (Exception exception) {
|
||||
reply.setCode(CIMConstant.ReturnCode.CODE_500);
|
||||
reply.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||
logger.error("Bind has error",exception);
|
||||
}
|
||||
|
||||
@ -117,7 +119,7 @@ public class BindHandler implements CIMRequestHandler {
|
||||
private void sendForceOfflineMessage(CIMSession oldSession, String account, String deviceModel) {
|
||||
|
||||
Message msg = new Message();
|
||||
msg.setAction(CIMConstant.MessageAction.ACTION_999);// 强行下线消息类型
|
||||
msg.setAction(CIMConstant.MessageAction.ACTION_OFFLINE);
|
||||
msg.setReceiver(account);
|
||||
msg.setSender("system");
|
||||
msg.setContent(deviceModel);
|
||||
@ -129,7 +131,6 @@ public class BindHandler implements CIMRequestHandler {
|
||||
|
||||
}
|
||||
|
||||
// 不同设备同一账号登录时关闭旧的连接
|
||||
private void closeQuietly(CIMSession oldSession) {
|
||||
if (oldSession.isConnected() && Objects.equals(host, oldSession.getHost())) {
|
||||
oldSession.setAttribute(CIMConstant.KEY_QUIETLY_CLOSE,true);
|
||||
|
@ -44,6 +44,7 @@ public class SessionClosedHandler implements CIMRequestHandler {
|
||||
@Resource
|
||||
private CIMSessionService cimSessionService;
|
||||
|
||||
@Override
|
||||
public void process(CIMSession ios, SentBody message) {
|
||||
Object quietly = ios.getAttribute(CIMConstant.KEY_QUIETLY_CLOSE);
|
||||
if (Objects.equals(quietly, true)) {
|
||||
@ -57,7 +58,7 @@ public class SessionClosedHandler implements CIMRequestHandler {
|
||||
|
||||
CIMSession oldSession = cimSessionService.get(account.toString());
|
||||
|
||||
if (oldSession == null || oldSession.isApnsOpend()) {
|
||||
if (oldSession == null || oldSession.isApnsEnable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,7 @@ public class DefaultMessagePusher implements CIMMessagePusher {
|
||||
*
|
||||
* @param message
|
||||
*/
|
||||
@Override
|
||||
public void push(Message message) {
|
||||
CIMSession session = cimSessionService.get(message.getReceiver());
|
||||
|
||||
@ -65,7 +66,7 @@ public class DefaultMessagePusher implements CIMMessagePusher {
|
||||
/*
|
||||
* IOS设备,如果开启了apns,则使用apns推送
|
||||
*/
|
||||
if (session.isIOSChannel() && session.isApnsOpend()) {
|
||||
if (session.isIOSChannel() && session.isApnsEnable()) {
|
||||
apnsService.push(message, session.getDeviceId());
|
||||
return;
|
||||
}
|
||||
|
@ -18,7 +18,9 @@ spring.messages.basename=i18n/messages
|
||||
##################################################################
|
||||
# CIM Config #
|
||||
##################################################################
|
||||
cim.server.port=23456
|
||||
cim.app.port=23456
|
||||
cim.websocket.port=34567
|
||||
|
||||
apple.apns.debug=false
|
||||
apple.apns.p12.password= your p12 password
|
||||
apple.apns.p12.file= /apns/lvxin.p12
|
||||
|
@ -21,7 +21,7 @@
|
||||
/***********************************推送配置开始**************************/
|
||||
|
||||
/** 当socket连接成功回调 **/
|
||||
function onConnectionSuccessed(){
|
||||
function onConnectFinished(){
|
||||
CIMPushManager.bindAccount($('#account').val());
|
||||
}
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
}
|
||||
showProcess('正在接入请稍后......');
|
||||
/**登录成功后创建连接****/
|
||||
CIMPushManager.connection();
|
||||
CIMPushManager.connect();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,216 +1,181 @@
|
||||
/*CIM服务器IP*/
|
||||
var CIM_HOST = "127.0.0.1";
|
||||
/*CIM服务端口*/
|
||||
var CIM_PORT = 23456;
|
||||
var CIM_URI="ws://"+CIM_HOST+":"+CIM_PORT;
|
||||
const CIM_HOST = "127.0.0.1";
|
||||
/*
|
||||
*服务端 websocket端口
|
||||
*/
|
||||
const CIM_PORT = 34567;
|
||||
const CIM_URI = "ws://" + CIM_HOST + ":" + CIM_PORT;
|
||||
|
||||
var CMD_HEARTBEAT_RESPONSE = new Uint8Array([67,82]);
|
||||
var SDK_VERSION = "1.0.0";
|
||||
var SDK_CHANNEL = "browser";
|
||||
var APP_PACKAGE = "com.farsunset.cim";
|
||||
var ACTION_999 = "999";//特殊的消息类型,代表被服务端强制下线
|
||||
var DATA_HEADER_LENGTH = 3;
|
||||
const APP_VERSION = "1.0.0";
|
||||
const APP_CHANNEL = "browser";
|
||||
const APP_PACKAGE = "com.farsunset.cim";
|
||||
|
||||
var C_H_RS = 0;
|
||||
var S_H_RQ = 1;
|
||||
var MESSAGE = 2;
|
||||
var SENTBODY = 3;
|
||||
var REPLYBODY = 4;
|
||||
/*
|
||||
*特殊的消息类型,代表被服务端强制下线
|
||||
*/
|
||||
const ACTION_999 = "999";
|
||||
const DATA_HEADER_LENGTH = 1;
|
||||
|
||||
var socket;
|
||||
var manualStop = false;
|
||||
var CIMPushManager = {};
|
||||
CIMPushManager.connection = function(){
|
||||
manualStop = false;
|
||||
window.localStorage.account = '';
|
||||
socket = new WebSocket(CIM_URI);
|
||||
socket.cookieEnabled=false;
|
||||
socket.binaryType = 'arraybuffer';
|
||||
socket.onopen = CIMPushManager.innerOnConnectionSuccessed;
|
||||
socket.onmessage = CIMPushManager.innerOnMessageReceived;
|
||||
const MESSAGE = 2;
|
||||
const REPLY_BODY = 4;
|
||||
|
||||
let socket;
|
||||
let manualStop = false;
|
||||
const CIMPushManager = {};
|
||||
CIMPushManager.connect = function () {
|
||||
manualStop = false;
|
||||
window.localStorage.account = '';
|
||||
socket = new WebSocket(CIM_URI);
|
||||
socket.cookieEnabled = false;
|
||||
socket.binaryType = 'arraybuffer';
|
||||
socket.onopen = CIMPushManager.innerOnConnectFinished;
|
||||
socket.onmessage = CIMPushManager.innerOnMessageReceived;
|
||||
socket.onclose = CIMPushManager.innerOnConnectionClosed;
|
||||
};
|
||||
|
||||
CIMPushManager.bindAccount = function(account){
|
||||
|
||||
window.localStorage.account = account;
|
||||
|
||||
var deviceId = window.localStorage.deviceIddeviceId;
|
||||
if(deviceId == '' || deviceId == undefined){
|
||||
deviceId = generateUUID();
|
||||
window.localStorage.deviceId = deviceId;
|
||||
}
|
||||
CIMPushManager.bindAccount = function (account) {
|
||||
|
||||
var browser = getBrowser();
|
||||
var body = new proto.com.farsunset.cim.sdk.web.model.SentBody();
|
||||
body.setKey("client_bind");
|
||||
body.getDataMap().set("account",account);
|
||||
body.getDataMap().set("channel",SDK_CHANNEL);
|
||||
body.getDataMap().set("version",SDK_VERSION);
|
||||
body.getDataMap().set("osVersion", browser.version);
|
||||
body.getDataMap().set("packageName", APP_PACKAGE);
|
||||
body.getDataMap().set("deviceId", deviceId);
|
||||
body.getDataMap().set("device", browser.name);
|
||||
CIMPushManager.sendRequest(body);
|
||||
window.localStorage.account = account;
|
||||
|
||||
let deviceId = window.localStorage.deviceIddeviceId;
|
||||
if (deviceId == '' || deviceId == undefined) {
|
||||
deviceId = generateUUID();
|
||||
window.localStorage.deviceId = deviceId;
|
||||
}
|
||||
|
||||
let browser = getBrowser();
|
||||
let body = new proto.com.farsunset.cim.sdk.web.model.SentBody();
|
||||
body.setKey("client_bind");
|
||||
body.setTimestamp(new Date().getTime());
|
||||
body.getDataMap().set("account", account);
|
||||
body.getDataMap().set("channel", APP_CHANNEL);
|
||||
body.getDataMap().set("appVersion", APP_VERSION);
|
||||
body.getDataMap().set("osVersion", browser.version);
|
||||
body.getDataMap().set("packageName", APP_PACKAGE);
|
||||
body.getDataMap().set("deviceId", deviceId);
|
||||
body.getDataMap().set("device", browser.name);
|
||||
CIMPushManager.sendRequest(body);
|
||||
};
|
||||
|
||||
CIMPushManager.stop = function(){
|
||||
manualStop = true;
|
||||
socket.close();
|
||||
CIMPushManager.stop = function () {
|
||||
manualStop = true;
|
||||
socket.close();
|
||||
};
|
||||
|
||||
CIMPushManager.resume = function(){
|
||||
CIMPushManager.resume = function () {
|
||||
manualStop = false;
|
||||
CIMPushManager.connection();
|
||||
CIMPushManager.connect();
|
||||
};
|
||||
|
||||
|
||||
CIMPushManager.innerOnConnectionSuccessed = function(){
|
||||
var account = window.localStorage.account;
|
||||
if(account == '' || account == undefined){
|
||||
onConnectionSuccessed();
|
||||
}else{
|
||||
CIMPushManager.bindAccount(account);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
CIMPushManager.innerOnMessageReceived = function(e){
|
||||
var data = new Uint8Array(e.data);
|
||||
|
||||
var type = data[0];
|
||||
|
||||
/**
|
||||
* 收到服务端发来的心跳请求,立即回复响应,否则服务端会在10秒后断开连接
|
||||
*/
|
||||
if(type == S_H_RQ){
|
||||
CIMPushManager.sendHeartbeatResponse();
|
||||
return;
|
||||
}
|
||||
|
||||
if(type == MESSAGE){
|
||||
var length = getContentLength(data[1],data[2]);
|
||||
var data = proto.com.farsunset.cim.sdk.web.model.Message.deserializeBinary(data.subarray(DATA_HEADER_LENGTH,DATA_HEADER_LENGTH+length));
|
||||
onInterceptMessageReceived(data.toObject(false));
|
||||
return;
|
||||
}
|
||||
|
||||
if(type == REPLYBODY){
|
||||
var length = getContentLength(data[1],data[2]);
|
||||
var data = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(data.subarray(DATA_HEADER_LENGTH,DATA_HEADER_LENGTH+length));
|
||||
/**
|
||||
* 将proto对象转换成json对象,去除无用信息
|
||||
*/
|
||||
var reply = {};
|
||||
reply.code = data.getCode();
|
||||
reply.key = data.getKey();
|
||||
reply.message = data.getMessage();
|
||||
reply.timestamp = data.getTimestamp();
|
||||
reply.data = {};
|
||||
|
||||
/**
|
||||
* 注意,遍历map这里的参数 value在前key在后
|
||||
*/
|
||||
data.getDataMap().forEach(function (v,k){
|
||||
reply.data[k] = v;
|
||||
});
|
||||
|
||||
onReplyReceived(reply);
|
||||
}
|
||||
CIMPushManager.innerOnConnectFinished = function () {
|
||||
let account = window.localStorage.account;
|
||||
if (account === '' || account === undefined) {
|
||||
onConnectFinished();
|
||||
} else {
|
||||
CIMPushManager.bindAccount(account);
|
||||
}
|
||||
};
|
||||
|
||||
CIMPushManager.innerOnConnectionClosed = function(e){
|
||||
if(!manualStop){
|
||||
var time = Math.floor(Math.random()*(30-15+1)+15);
|
||||
setTimeout(function(){
|
||||
CIMPushManager.connection();
|
||||
},time);
|
||||
}
|
||||
|
||||
CIMPushManager.innerOnMessageReceived = function (e) {
|
||||
let data = new Uint8Array(e.data);
|
||||
let type = data[0];
|
||||
let body = data.subarray(DATA_HEADER_LENGTH, data.length);
|
||||
|
||||
if (type == MESSAGE) {
|
||||
let message = proto.com.farsunset.cim.sdk.web.model.Message.deserializeBinary(body);
|
||||
onInterceptMessageReceived(message.toObject(false));
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == REPLY_BODY) {
|
||||
let message = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(body);
|
||||
/**
|
||||
* 将proto对象转换成json对象,去除无用信息
|
||||
*/
|
||||
let reply = {};
|
||||
reply.code = message.getCode();
|
||||
reply.key = message.getKey();
|
||||
reply.message = message.getMessage();
|
||||
reply.timestamp = message.getTimestamp();
|
||||
reply.data = {};
|
||||
|
||||
/**
|
||||
* 注意,遍历map这里的参数 value在前key在后
|
||||
*/
|
||||
message.getDataMap().forEach(function (v, k) {
|
||||
reply.data[k] = v;
|
||||
});
|
||||
|
||||
onReplyReceived(reply);
|
||||
}
|
||||
};
|
||||
|
||||
CIMPushManager.sendRequest = function(body){
|
||||
|
||||
var data = body.serializeBinary();
|
||||
var header = buildHeader(SENTBODY,data.length);
|
||||
var protubuf = new Uint8Array(data.length + header.length);
|
||||
protubuf.set(header,0);
|
||||
protubuf.set(data,header.length);
|
||||
socket.send(protubuf);
|
||||
CIMPushManager.innerOnConnectionClosed = function (e) {
|
||||
if (!manualStop) {
|
||||
let time = Math.floor(Math.random() * (30 - 15 + 1) + 15);
|
||||
setTimeout(function () {
|
||||
CIMPushManager.connect();
|
||||
}, time);
|
||||
}
|
||||
};
|
||||
|
||||
CIMPushManager.sendHeartbeatResponse = function(){
|
||||
var data = CMD_HEARTBEAT_RESPONSE;
|
||||
var header = buildHeader(C_H_RS,data.length);
|
||||
var protubuf = new Uint8Array(data.length + header.length);
|
||||
protubuf.set(header,0);
|
||||
protubuf.set(data,header.length);
|
||||
socket.send(protubuf);
|
||||
CIMPushManager.sendRequest = function (body) {
|
||||
let data = body.serializeBinary();
|
||||
let protobuf = new Uint8Array(data.length);
|
||||
protobuf.set(data, 0);
|
||||
socket.send(protobuf);
|
||||
};
|
||||
|
||||
function getContentLength( lv, hv) {
|
||||
var l = (lv & 0xff);
|
||||
var h = (hv & 0xff);
|
||||
return (l | (h <<= 8));
|
||||
}
|
||||
|
||||
function buildHeader(type,length){
|
||||
var header = new Uint8Array(DATA_HEADER_LENGTH);
|
||||
header[0] = type;
|
||||
header[1] = (length & 0xff);
|
||||
header[2] = ((length >> 8) & 0xff);
|
||||
return header;
|
||||
|
||||
}
|
||||
function onInterceptMessageReceived(message){
|
||||
//被强制下线之后,不再继续连接服务端
|
||||
if(message.action == ACTION_999){
|
||||
manualStop = true;
|
||||
}
|
||||
//收到消息后,将消息发送给页面
|
||||
if(onMessageReceived instanceof Function){
|
||||
onMessageReceived(message);
|
||||
}
|
||||
function onInterceptMessageReceived(message) {
|
||||
/*
|
||||
*被强制下线之后,不再继续连接服务端
|
||||
*/
|
||||
if (message.action == ACTION_999) {
|
||||
manualStop = true;
|
||||
}
|
||||
/*
|
||||
*收到消息后,将消息发送给页面
|
||||
*/
|
||||
if (onMessageReceived instanceof Function) {
|
||||
onMessageReceived(message);
|
||||
}
|
||||
}
|
||||
|
||||
function getBrowser() {
|
||||
var explorer = window.navigator.userAgent.toLowerCase() ;
|
||||
// ie
|
||||
if (explorer.indexOf("msie") >= 0) {
|
||||
var ver=explorer.match(/msie ([\d.]+)/)[1];
|
||||
return {name:"IE",version:ver};
|
||||
}
|
||||
// firefox
|
||||
else if (explorer.indexOf("firefox") >= 0) {
|
||||
var ver=explorer.match(/firefox\/([\d.]+)/)[1];
|
||||
return {name:"Firefox",version:ver};
|
||||
}
|
||||
// Chrome
|
||||
else if(explorer.indexOf("chrome") >= 0){
|
||||
var ver=explorer.match(/chrome\/([\d.]+)/)[1];
|
||||
return {name:"Chrome",version:ver};
|
||||
}
|
||||
// Opera
|
||||
else if(explorer.indexOf("opera") >= 0){
|
||||
var ver=explorer.match(/opera.([\d.]+)/)[1];
|
||||
return {name:"Opera",version:ver};
|
||||
}
|
||||
// Safari
|
||||
else if(explorer.indexOf("Safari") >= 0){
|
||||
var ver=explorer.match(/version\/([\d.]+)/)[1];
|
||||
return {name:"Safari",version:ver};
|
||||
}
|
||||
|
||||
return {name:"Other",version:"1.0.0"};
|
||||
let explorer = window.navigator.userAgent.toLowerCase();
|
||||
if (explorer.indexOf("msie") >= 0) {
|
||||
let ver = explorer.match(/msie ([\d.]+)/)[1];
|
||||
return {name: "IE", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("firefox") >= 0) {
|
||||
let ver = explorer.match(/firefox\/([\d.]+)/)[1];
|
||||
return {name: "Firefox", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("chrome") >= 0) {
|
||||
let ver = explorer.match(/chrome\/([\d.]+)/)[1];
|
||||
return {name: "Chrome", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("opera") >= 0) {
|
||||
let ver = explorer.match(/opera.([\d.]+)/)[1];
|
||||
return {name: "Opera", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("Safari") >= 0) {
|
||||
let ver = explorer.match(/version\/([\d.]+)/)[1];
|
||||
return {name: "Safari", version: ver};
|
||||
}
|
||||
|
||||
return {name: "Other", version: "1.0.0"};
|
||||
}
|
||||
|
||||
function generateUUID() {
|
||||
var d = new Date().getTime();
|
||||
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = (d + Math.random()*16)%16 | 0;
|
||||
d = Math.floor(d/16);
|
||||
return (c=='x' ? r : (r&0x3|0x8)).toString(16);
|
||||
});
|
||||
return uuid.replace(/-/g,'');
|
||||
let d = new Date().getTime();
|
||||
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
let r = (d + Math.random() * 16) % 16 | 0;
|
||||
d = Math.floor(d / 16);
|
||||
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
|
||||
});
|
||||
return uuid.replace(/-/g, '');
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="libs/android.jar"/>
|
||||
<classpathentry kind="lib" path="libs/protobuf-lite-3.0.0.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
2
cim-client-sdk/cim-android-sdk/.gitignore
vendored
Normal file
2
cim-client-sdk/cim-android-sdk/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target/
|
||||
.idea/
|
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>cim-android-sdk</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.genuitec.eclipse.ast.deploy.core.DeploymentBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>com.genuitec.eclipse.ast.deploy.core.deploymentnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -1,3 +0,0 @@
|
||||
#Wed Oct 15 09:31:41 CST 2014
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
@ -1,12 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
2
cim-client-sdk/cim-android-sdk/cim-android-sdk.iml
Normal file
2
cim-client-sdk/cim-android-sdk/cim-android-sdk.iml
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4" />
|
1
cim-client-sdk/cim-android-sdk/jar.bat
Normal file
1
cim-client-sdk/cim-android-sdk/jar.bat
Normal file
@ -0,0 +1 @@
|
||||
mvn clean package
|
1
cim-client-sdk/cim-android-sdk/jar.sh
Normal file
1
cim-client-sdk/cim-android-sdk/jar.sh
Normal file
@ -0,0 +1 @@
|
||||
mvn clean package
|
Binary file not shown.
59
cim-client-sdk/cim-android-sdk/pom.xml
Normal file
59
cim-client-sdk/cim-android-sdk/pom.xml
Normal file
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.farsunset</groupId>
|
||||
<artifactId>cim-android-sdk</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<protobuf.lite.version>3.0.1</protobuf.lite.version>
|
||||
<netty.version>4.1.44.Final</netty.version>
|
||||
<slf4j.version>1.7.30</slf4j.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.protobuf</groupId>
|
||||
<artifactId>protobuf-lite</artifactId>
|
||||
<version>${protobuf.lite.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${slf4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>android</groupId>
|
||||
<artifactId>android</artifactId>
|
||||
<scope>system</scope>
|
||||
<version>8.0.0</version>
|
||||
<systemPath>${project.basedir}/libs/android.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -39,9 +39,9 @@ class CIMCacheManager {
|
||||
|
||||
public static final String KEY_CIM_DESTROYED = "KEY_CIM_DESTROYED";
|
||||
|
||||
public static final String KEY_CIM_SERVIER_HOST = "KEY_CIM_SERVIER_HOST";
|
||||
public static final String KEY_CIM_SERVER_HOST = "KEY_CIM_SERVER_HOST";
|
||||
|
||||
public static final String KEY_CIM_SERVIER_PORT = "KEY_CIM_SERVIER_PORT";
|
||||
public static final String KEY_CIM_SERVER_PORT = "KEY_CIM_SERVER_PORT";
|
||||
|
||||
public static final String KEY_CIM_CONNECTION_STATE = "KEY_CIM_CONNECTION_STATE";
|
||||
|
||||
@ -76,8 +76,9 @@ class CIMCacheManager {
|
||||
|
||||
private static void closeQuietly(Cursor cursor) {
|
||||
try {
|
||||
if (cursor != null)
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
@ -88,7 +89,7 @@ class CIMCacheManager {
|
||||
|
||||
public static boolean getBoolean(Context context, String key) {
|
||||
String value = getString(context, key);
|
||||
return value == null ? false : Boolean.parseBoolean(value);
|
||||
return Boolean.parseBoolean(value);
|
||||
}
|
||||
|
||||
public static void putInt(Context context, String key, int value) {
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,6 +21,17 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.Process;
|
||||
import com.farsunset.cim.sdk.android.coder.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.coder.ClientMessageDecoder;
|
||||
import com.farsunset.cim.sdk.android.coder.ClientMessageEncoder;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ConnectException;
|
||||
import java.net.InetSocketAddress;
|
||||
@ -31,26 +42,8 @@ import java.util.Random;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Semaphore;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import com.farsunset.cim.sdk.android.coder.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.coder.ClientMessageDecoder;
|
||||
import com.farsunset.cim.sdk.android.coder.ClientMessageEncoder;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.HeartbeatRequest;
|
||||
import com.farsunset.cim.sdk.android.model.HeartbeatResponse;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.Protobufable;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.Process;
|
||||
|
||||
/**
|
||||
* 连接服务端管理,cim核心处理类,管理连接,以及消息处理
|
||||
*
|
||||
@ -60,19 +53,19 @@ class CIMConnectorManager{
|
||||
|
||||
private static CIMConnectorManager manager;
|
||||
|
||||
private final int READ_BUFFER_SIZE = 2048;
|
||||
private final int WRITE_BUFFER_SIZE = 1024;
|
||||
private static final int READ_BUFFER_SIZE = 2048;
|
||||
private static final int WRITE_BUFFER_SIZE = 1024;
|
||||
|
||||
private final int READ_IDLE_TIME = 120 * 1000;
|
||||
private static final int READ_IDLE_TIME = 120 * 1000;
|
||||
|
||||
private final int CONNECT_TIME_OUT = 10 * 1000;
|
||||
private static final int CONNECT_TIME_OUT = 10 * 1000;
|
||||
|
||||
|
||||
private final int CONNECT_ALIVE_TIME_OUT = 150 * 1000;
|
||||
private static final int CONNECT_ALIVE_TIME_OUT = 150 * 1000;
|
||||
|
||||
private final AtomicLong LAST_READ_TIME = new AtomicLong(0);
|
||||
private static final AtomicLong LAST_READ_TIME = new AtomicLong(0);
|
||||
|
||||
private final CIMLogger LOGGER = CIMLogger.getLogger();
|
||||
private static final CIMLogger LOGGER = CIMLogger.getLogger();
|
||||
|
||||
private static final HandlerThread IDLE_HANDLER_THREAD = new HandlerThread("READ-IDLE", Process.THREAD_PRIORITY_BACKGROUND);
|
||||
|
||||
@ -85,19 +78,9 @@ class CIMConnectorManager{
|
||||
|
||||
private ByteBuffer readBuffer = ByteBuffer.allocate(READ_BUFFER_SIZE);
|
||||
|
||||
private ExecutorService workerExecutor = Executors.newFixedThreadPool(1,new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r,"worker-");
|
||||
}
|
||||
});
|
||||
private ExecutorService workerExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r,"worker-"));
|
||||
|
||||
private ExecutorService bossExecutor = Executors.newFixedThreadPool(1,new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r,"boss-");
|
||||
}
|
||||
});
|
||||
private ExecutorService bossExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r,"boss-"));
|
||||
|
||||
private ClientMessageEncoder messageEncoder = new ClientMessageEncoder();
|
||||
private ClientMessageDecoder messageDecoder = new ClientMessageDecoder();
|
||||
@ -126,7 +109,7 @@ class CIMConnectorManager{
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FAILED);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
return;
|
||||
@ -136,62 +119,56 @@ class CIMConnectorManager{
|
||||
return;
|
||||
}
|
||||
|
||||
bossExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
LOGGER.startConnect(host, port);
|
||||
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_CIM_CONNECTION_STATE, false);
|
||||
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
socketChannel = SocketChannel.open();
|
||||
socketChannel.configureBlocking(true);
|
||||
socketChannel.socket().setTcpNoDelay(true);
|
||||
socketChannel.socket().setKeepAlive(true);
|
||||
socketChannel.socket().setReceiveBufferSize(READ_BUFFER_SIZE);
|
||||
socketChannel.socket().setSendBufferSize(WRITE_BUFFER_SIZE);
|
||||
|
||||
socketChannel.socket().connect(new InetSocketAddress(host, port),CONNECT_TIME_OUT);
|
||||
|
||||
semaphore.release();
|
||||
|
||||
handelConnectedEvent();
|
||||
|
||||
|
||||
int result = -1;
|
||||
|
||||
while((result = socketChannel.read(readBuffer)) > 0) {
|
||||
|
||||
if(readBuffer.position() == readBuffer.capacity()) {
|
||||
extendByteBuffer();
|
||||
}
|
||||
|
||||
handelSocketReadEvent(result);
|
||||
|
||||
bossExecutor.execute(() -> {
|
||||
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
LOGGER.startConnect(host, port);
|
||||
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_CIM_CONNECTION_STATE, false);
|
||||
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
socketChannel = SocketChannel.open();
|
||||
socketChannel.configureBlocking(true);
|
||||
socketChannel.socket().setTcpNoDelay(true);
|
||||
socketChannel.socket().setKeepAlive(true);
|
||||
socketChannel.socket().setReceiveBufferSize(READ_BUFFER_SIZE);
|
||||
socketChannel.socket().setSendBufferSize(WRITE_BUFFER_SIZE);
|
||||
|
||||
socketChannel.socket().connect(new InetSocketAddress(host, port),CONNECT_TIME_OUT);
|
||||
|
||||
semaphore.release();
|
||||
|
||||
handelConnectedEvent();
|
||||
|
||||
|
||||
int result = -1;
|
||||
|
||||
while((result = socketChannel.read(readBuffer)) > 0) {
|
||||
|
||||
if(readBuffer.position() == readBuffer.capacity()) {
|
||||
extendByteBuffer();
|
||||
}
|
||||
|
||||
|
||||
handelSocketReadEvent(result);
|
||||
|
||||
}catch(ConnectException ignore){
|
||||
semaphore.release();
|
||||
handleConnectAbortedEvent();
|
||||
}catch(SocketTimeoutException ignore){
|
||||
semaphore.release();
|
||||
handleConnectAbortedEvent();
|
||||
}catch(IOException ignore) {
|
||||
semaphore.release();
|
||||
handelDisconnectedEvent();
|
||||
}catch(InterruptedException ignore) {
|
||||
semaphore.release();
|
||||
|
||||
}
|
||||
|
||||
handelSocketReadEvent(result);
|
||||
|
||||
}catch(ConnectException | SocketTimeoutException ignore){
|
||||
semaphore.release();
|
||||
handleConnectAbortedEvent();
|
||||
} catch(IOException ignore) {
|
||||
semaphore.release();
|
||||
handelDisconnectedEvent();
|
||||
}catch(InterruptedException ignore) {
|
||||
semaphore.release();
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -229,32 +206,28 @@ class CIMConnectorManager{
|
||||
return;
|
||||
}
|
||||
|
||||
workerExecutor.execute(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
int result = 0;
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
ByteBuffer buffer = messageEncoder.encode(body);
|
||||
while(buffer.hasRemaining()){
|
||||
result += socketChannel.write(buffer);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
result = -1;
|
||||
}finally {
|
||||
|
||||
semaphore.release();
|
||||
|
||||
if(result <= 0) {
|
||||
closeSession();
|
||||
}else {
|
||||
messageSent(body);
|
||||
}
|
||||
}
|
||||
workerExecutor.execute(() -> {
|
||||
int result = 0;
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
ByteBuffer buffer = messageEncoder.encode(body);
|
||||
while(buffer.hasRemaining()){
|
||||
result += socketChannel.write(buffer);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
result = -1;
|
||||
}finally {
|
||||
|
||||
semaphore.release();
|
||||
|
||||
if(result <= 0) {
|
||||
closeSession();
|
||||
}else {
|
||||
messageSent(body);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@ -268,7 +241,7 @@ class CIMConnectorManager{
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FINISHED);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
}
|
||||
@ -298,9 +271,8 @@ class CIMConnectorManager{
|
||||
|
||||
LOGGER.sessionIdle(socketChannel);
|
||||
|
||||
/**
|
||||
/*
|
||||
* 用于解决,wifi情况下。偶而路由器与服务器断开连接时,客户端并没及时收到关闭事件 导致这样的情况下当前连接无效也不会重连的问题
|
||||
*
|
||||
*/
|
||||
if (System.currentTimeMillis() - LAST_READ_TIME.get() >= CONNECT_ALIVE_TIME_OUT) {
|
||||
closeSession();
|
||||
@ -337,13 +309,14 @@ class CIMConnectorManager{
|
||||
if (message instanceof SentBody) {
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_SEND_FINISHED);
|
||||
intent.putExtra(SentBody.class.getName(), (SentBody) message);
|
||||
context.sendBroadcast(intent);
|
||||
}
|
||||
}
|
||||
|
||||
private Handler idleHandler = new Handler(IDLE_HANDLER_THREAD.getLooper()) {
|
||||
@Override
|
||||
public void handleMessage(android.os.Message m) {
|
||||
sessionIdle();
|
||||
}
|
||||
@ -355,13 +328,13 @@ class CIMConnectorManager{
|
||||
|
||||
private void handleConnectAbortedEvent() {
|
||||
|
||||
long interval = CIMConstant.RECONN_INTERVAL_TIME - (5 * 1000 - new Random().nextInt(15 * 1000));
|
||||
long interval = CIMConstant.RECONNECT_INTERVAL_TIME - (5 * 1000 - new Random().nextInt(15 * 1000));
|
||||
|
||||
LOGGER.connectFailure(interval);
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setPackage(context.getPackageName());
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FAILED);
|
||||
intent.putExtra("interval", interval);
|
||||
context.sendBroadcast(intent);
|
||||
|
||||
@ -374,7 +347,7 @@ class CIMConnectorManager{
|
||||
idleHandler.sendEmptyMessageDelayed(0, READ_IDLE_TIME);
|
||||
}
|
||||
|
||||
private void handelSocketReadEvent(int result) throws IOException {
|
||||
private void handelSocketReadEvent(int result) {
|
||||
|
||||
if(result == -1) {
|
||||
closeSession();
|
||||
@ -395,7 +368,7 @@ class CIMConnectorManager{
|
||||
|
||||
if(isHeartbeatRequest(message)) {
|
||||
|
||||
send(getHeartbeatResponse());
|
||||
send(HeartbeatResponse.getInstance());
|
||||
|
||||
return;
|
||||
}
|
||||
@ -425,11 +398,7 @@ class CIMConnectorManager{
|
||||
idleHandler.sendEmptyMessageDelayed(0, READ_IDLE_TIME);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private HeartbeatResponse getHeartbeatResponse() {
|
||||
return HeartbeatResponse.getInstance();
|
||||
}
|
||||
|
||||
private boolean isHeartbeatRequest(Object data) {
|
||||
return data instanceof HeartbeatRequest;
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,16 +21,15 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Build;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
|
||||
/**
|
||||
* 消息入口,所有消息都会经过这里
|
||||
@ -45,20 +44,22 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
this.context = context;
|
||||
|
||||
String action = intent.getAction();
|
||||
|
||||
/*
|
||||
* 操作事件广播,用于提高service存活率
|
||||
*/
|
||||
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)
|
||||
|| intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)
|
||||
|| intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)) {
|
||||
if (Intent.ACTION_USER_PRESENT.equals(action)
|
||||
|| Intent.ACTION_POWER_CONNECTED.equals(action)
|
||||
|| Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
|
||||
startPushService();
|
||||
}
|
||||
|
||||
/*
|
||||
* 设备网络状态变化事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_NETWORK_CHANGED)
|
||||
||intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
|
||||
if (CIMConstant.IntentAction.ACTION_NETWORK_CHANGED.equals(action)
|
||||
||ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
|
||||
|
||||
onDevicesNetworkChanged();
|
||||
}
|
||||
@ -66,51 +67,51 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
/*
|
||||
* cim断开服务器事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED)) {
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED.equals(action)) {
|
||||
onInnerConnectionClosed();
|
||||
}
|
||||
|
||||
/*
|
||||
* cim连接服务器失败事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED)) {
|
||||
long interval = intent.getLongExtra("interval", CIMConstant.RECONN_INTERVAL_TIME);
|
||||
onConnectionFailed(interval);
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECT_FAILED.equals(action)) {
|
||||
long interval = intent.getLongExtra("interval", CIMConstant.RECONNECT_INTERVAL_TIME);
|
||||
onInnerConnectFailed(interval);
|
||||
}
|
||||
|
||||
/*
|
||||
* cim连接服务器成功事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED)) {
|
||||
onInnerConnectionSuccessed();
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECT_FINISHED.equals(action)) {
|
||||
onInnerConnectFinished();
|
||||
}
|
||||
|
||||
/*
|
||||
* 收到推送消息事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED)) {
|
||||
if (CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED.equals(action)) {
|
||||
onInnerMessageReceived((Message) intent.getSerializableExtra(Message.class.getName()), intent);
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取收到replybody成功事件
|
||||
* 获取收到replyBody成功事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED)) {
|
||||
if (CIMConstant.IntentAction.ACTION_REPLY_RECEIVED.equals(action)) {
|
||||
onReplyReceived((ReplyBody) intent.getSerializableExtra(ReplyBody.class.getName()));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 获取sendbody发送成功事件
|
||||
* 获取sendBody发送成功事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED)) {
|
||||
if (CIMConstant.IntentAction.ACTION_SEND_FINISHED.equals(action)) {
|
||||
onSentSucceed((SentBody) intent.getSerializableExtra(SentBody.class.getName()));
|
||||
}
|
||||
|
||||
/*
|
||||
* 重新连接,如果断开的话
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECTION_RECOVERY)) {
|
||||
if (CIMConstant.IntentAction.ACTION_CONNECTION_RECOVERY.equals(action)) {
|
||||
connect(0);
|
||||
}
|
||||
}
|
||||
@ -138,21 +139,21 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
onConnectionClosed();
|
||||
}
|
||||
|
||||
private void onConnectionFailed(long reinterval) {
|
||||
private void onInnerConnectFailed(long interval) {
|
||||
|
||||
if (CIMPushManager.isNetworkConnected(context)) {
|
||||
|
||||
onConnectionFailed();
|
||||
onConnectFailed();
|
||||
|
||||
connect(reinterval);
|
||||
connect(interval);
|
||||
}
|
||||
}
|
||||
|
||||
private void onInnerConnectionSuccessed() {
|
||||
private void onInnerConnectFinished() {
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_CIM_CONNECTION_STATE, true);
|
||||
|
||||
boolean autoBind = CIMPushManager.autoBindAccount(context);
|
||||
onConnectionSuccessed(autoBind);
|
||||
onConnectFinished(autoBind);
|
||||
}
|
||||
|
||||
private void onDevicesNetworkChanged() {
|
||||
@ -171,7 +172,7 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
CIMPushManager.startService(context,serviceIntent);
|
||||
}
|
||||
|
||||
private void onInnerMessageReceived(com.farsunset.cim.sdk.android.model.Message message, Intent intent) {
|
||||
private void onInnerMessageReceived(Message message, Intent intent) {
|
||||
if (isForceOfflineMessage(message.getAction())) {
|
||||
CIMPushManager.stop(context);
|
||||
}
|
||||
@ -182,31 +183,37 @@ public abstract class CIMEventBroadcastReceiver extends BroadcastReceiver {
|
||||
private boolean isForceOfflineMessage(String action) {
|
||||
return CIMConstant.MessageAction.ACTION_999.equals(action);
|
||||
}
|
||||
|
||||
|
||||
public abstract void onMessageReceived(com.farsunset.cim.sdk.android.model.Message message, Intent intent);
|
||||
|
||||
/**
|
||||
* 接收消息实现方法
|
||||
* @param message
|
||||
* @param intent
|
||||
*/
|
||||
public abstract void onMessageReceived(Message message, Intent intent);
|
||||
|
||||
public void onNetworkChanged() {
|
||||
CIMListenerManager.notifyOnNetworkChanged(CIMPushManager.getNetworkInfo(context));
|
||||
}
|
||||
|
||||
public void onConnectionSuccessed(boolean hasAutoBind) {
|
||||
CIMListenerManager.notifyOnConnectionSuccessed(hasAutoBind);
|
||||
public void onConnectFinished(boolean hasAutoBind) {
|
||||
CIMListenerManager.notifyOnConnectFinished(hasAutoBind);
|
||||
}
|
||||
|
||||
public void onConnectFailed() {
|
||||
CIMListenerManager.notifyOnConnectFailed();
|
||||
}
|
||||
|
||||
public void onConnectionClosed() {
|
||||
CIMListenerManager.notifyOnConnectionClosed();
|
||||
}
|
||||
|
||||
public void onConnectionFailed() {
|
||||
CIMListenerManager.notifyOnConnectionFailed();
|
||||
}
|
||||
|
||||
public void onReplyReceived(ReplyBody body) {
|
||||
CIMListenerManager.notifyOnReplyReceived(body);
|
||||
}
|
||||
|
||||
public void onSentSucceed(SentBody body) {
|
||||
CIMListenerManager.notifyOnSentSucceed(body);
|
||||
CIMListenerManager.notifyOnSendFinished(body);
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -22,7 +22,6 @@
|
||||
package com.farsunset.cim.sdk.android;
|
||||
|
||||
import android.net.NetworkInfo;
|
||||
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
@ -42,31 +41,31 @@ public interface CIMEventListener {
|
||||
/**
|
||||
* 当调用CIMPushManager.sendRequest()向服务端发送请求,获得相应时调用
|
||||
*
|
||||
* @param replybody
|
||||
* @param body
|
||||
*/
|
||||
void onReplyReceived(ReplyBody replybody);
|
||||
void onReplyReceived(ReplyBody body);
|
||||
|
||||
/**
|
||||
* 当调用CIMPushManager.sendRequest()向服务端发送请求成功时
|
||||
*
|
||||
*
|
||||
* @param body
|
||||
*/
|
||||
void onSentSuccessed(SentBody body);
|
||||
void onSendFinished(SentBody body);
|
||||
|
||||
/**
|
||||
* 当手机网络发生变化时调用
|
||||
*
|
||||
* @param networkinfo
|
||||
* @param info
|
||||
*/
|
||||
void onNetworkChanged(NetworkInfo networkinfo);
|
||||
void onNetworkChanged(NetworkInfo info);
|
||||
|
||||
/**
|
||||
* 当连接服务器成功时回调
|
||||
*
|
||||
* @param hasAutoBind
|
||||
* : true 已经自动绑定账号到服务器了,不需要再手动调用bindAccount
|
||||
* true 已经自动绑定账号到服务器了,不需要再手动调用bindAccount
|
||||
*/
|
||||
void onConnectionSuccessed(boolean hasAutoBind);
|
||||
void onConnectFinished(boolean hasAutoBind);
|
||||
|
||||
/**
|
||||
* 当断开服务器连接的时候回调
|
||||
@ -78,10 +77,11 @@ public interface CIMEventListener {
|
||||
* 当连接服务器失败的时候回调
|
||||
*
|
||||
*/
|
||||
void onConnectionFailed();
|
||||
void onConnectFailed();
|
||||
|
||||
/**
|
||||
* 监听器在容器里面的排序。值越大则越先接收
|
||||
* @return 排序 值越大优先级越高
|
||||
*/
|
||||
int getEventDispatchOrder();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,16 +21,16 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
|
||||
import android.net.NetworkInfo;
|
||||
import android.util.Log;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
import com.farsunset.cim.sdk.android.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
|
||||
import android.net.NetworkInfo;
|
||||
import android.util.Log;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* CIM 消息监听器管理
|
||||
@ -38,20 +38,26 @@ import android.util.Log;
|
||||
public class CIMListenerManager {
|
||||
|
||||
private static ArrayList<CIMEventListener> cimListeners = new ArrayList<CIMEventListener>();
|
||||
private static CIMMessageReceiveComparator comparator = new CIMMessageReceiveComparator();
|
||||
private static ReceiveComparator comparator = new ReceiveComparator();
|
||||
|
||||
private CIMListenerManager(){
|
||||
|
||||
}
|
||||
|
||||
public static void registerMessageListener(CIMEventListener listener) {
|
||||
|
||||
if (!cimListeners.contains(listener)) {
|
||||
cimListeners.add(listener);
|
||||
Collections.sort(cimListeners, comparator);
|
||||
Collections.sort(cimListeners,comparator);
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeMessageListener(CIMEventListener listener) {
|
||||
for (int i = 0; i < cimListeners.size(); i++) {
|
||||
if (listener.getClass() == cimListeners.get(i).getClass()) {
|
||||
cimListeners.remove(i);
|
||||
Iterator<CIMEventListener> iterable = cimListeners.iterator();
|
||||
while (iterable.hasNext()){
|
||||
CIMEventListener target = iterable.next();
|
||||
if (listener.getClass() == target.getClass()) {
|
||||
iterable.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -62,9 +68,9 @@ public class CIMListenerManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static void notifyOnConnectionSuccessed(boolean hasAutoBind) {
|
||||
public static void notifyOnConnectFinished(boolean hasAutoBind) {
|
||||
for (CIMEventListener listener : cimListeners) {
|
||||
listener.onConnectionSuccessed(hasAutoBind);
|
||||
listener.onConnectFinished(hasAutoBind);
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,9 +86,9 @@ public class CIMListenerManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static void notifyOnConnectionFailed() {
|
||||
public static void notifyOnConnectFailed() {
|
||||
for (CIMEventListener listener : cimListeners) {
|
||||
listener.onConnectionFailed();
|
||||
listener.onConnectFailed();
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,13 +98,13 @@ public class CIMListenerManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static void notifyOnSentSucceed(SentBody body) {
|
||||
public static void notifyOnSendFinished(SentBody body) {
|
||||
for (CIMEventListener listener : cimListeners) {
|
||||
listener.onSentSuccessed(body);
|
||||
listener.onSendFinished(body);
|
||||
}
|
||||
}
|
||||
|
||||
public static void destory() {
|
||||
public static void destroy() {
|
||||
cimListeners.clear();
|
||||
}
|
||||
|
||||
@ -111,14 +117,14 @@ public class CIMListenerManager {
|
||||
/**
|
||||
* 消息接收activity的接收顺序排序,CIM_RECEIVE_ORDER倒序
|
||||
*/
|
||||
private static class CIMMessageReceiveComparator implements Comparator<CIMEventListener> {
|
||||
private static class ReceiveComparator implements Comparator<CIMEventListener> {
|
||||
|
||||
@Override
|
||||
public int compare(CIMEventListener arg1, CIMEventListener arg2) {
|
||||
|
||||
int order1 = arg1.getEventDispatchOrder();
|
||||
int order2 = arg2.getEventDispatchOrder();
|
||||
return order2 - order1;
|
||||
return Integer.compare(order2,order1);
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,8 +21,6 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
@ -31,11 +29,12 @@ import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.farsunset.cim.sdk.android.coder.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* CIM 功能接口
|
||||
*/
|
||||
@ -49,18 +48,12 @@ public class CIMPushManager {
|
||||
|
||||
protected static String ACTION_CLOSE_CIM_CONNECTION = "ACTION_CLOSE_CIM_CONNECTION";
|
||||
|
||||
protected static String ACTION_SET_LOGGER_EANABLE = "ACTION_SET_LOGGER_EANABLE";
|
||||
protected static String ACTION_SET_LOGGER_EATABLE = "ACTION_SET_LOGGER_EATABLE";
|
||||
|
||||
protected static String KEY_SEND_BODY = "KEY_SEND_BODY";
|
||||
|
||||
protected static String KEY_CIM_CONNECTION_STATUS = "KEY_CIM_CONNECTION_STATUS";
|
||||
|
||||
/**
|
||||
* 初始化,连接服务端,在程序启动页或者 在Application里调用
|
||||
*
|
||||
* @param context
|
||||
* @param ip
|
||||
* @param port
|
||||
*/
|
||||
public static void connect(Context context, String host, int port) {
|
||||
|
||||
@ -70,8 +63,8 @@ public class CIMPushManager {
|
||||
}
|
||||
|
||||
|
||||
CIMCacheManager.putString(context, CIMCacheManager.KEY_CIM_SERVIER_HOST, host);
|
||||
CIMCacheManager.putInt(context, CIMCacheManager.KEY_CIM_SERVIER_PORT, port);
|
||||
CIMCacheManager.putString(context, CIMCacheManager.KEY_CIM_SERVER_HOST, host);
|
||||
CIMCacheManager.putInt(context, CIMCacheManager.KEY_CIM_SERVER_PORT, port);
|
||||
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_CIM_DESTROYED, false);
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_MANUAL_STOP, false);
|
||||
@ -88,20 +81,17 @@ public class CIMPushManager {
|
||||
public static void setLoggerEnable(Context context,boolean enable) {
|
||||
Intent serviceIntent = new Intent(context, CIMPushService.class);
|
||||
serviceIntent.putExtra(CIMPushService.KEY_LOGGER_ENABLE, enable);
|
||||
serviceIntent.setAction(ACTION_SET_LOGGER_EANABLE);
|
||||
serviceIntent.setAction(ACTION_SET_LOGGER_EATABLE);
|
||||
startService(context,serviceIntent);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置一个账号登录到服务端
|
||||
*
|
||||
* @param account
|
||||
* 用户唯一ID
|
||||
*/
|
||||
public static void bindAccount(Context context, String account) {
|
||||
|
||||
if (isDestoryed(context) || account == null || account.trim().length() == 0) {
|
||||
if (isDestroyed(context) || account == null || account.trim().length() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -114,28 +104,24 @@ public class CIMPushManager {
|
||||
CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_MANUAL_STOP, false);
|
||||
CIMCacheManager.putString(context, CIMCacheManager.KEY_ACCOUNT, account);
|
||||
|
||||
String deviceId = CIMCacheManager.getString(context, CIMCacheManager.KEY_DEVICE_ID);
|
||||
if (TextUtils.isEmpty(deviceId)) {
|
||||
deviceId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
|
||||
CIMCacheManager.putString(context, CIMCacheManager.KEY_DEVICE_ID, deviceId);
|
||||
}
|
||||
|
||||
SentBody sent = new SentBody();
|
||||
sent.setKey(CIMConstant.RequestKey.CLIENT_BIND);
|
||||
sent.put("account", account);
|
||||
sent.put("deviceId", deviceId);
|
||||
sent.put("deviceId", getDeviceId(context));
|
||||
sent.put("channel", "android");
|
||||
sent.put("device", android.os.Build.MODEL);
|
||||
sent.put("version", getVersionName(context));
|
||||
sent.put("osVersion", android.os.Build.VERSION.RELEASE);
|
||||
sent.put("device", Build.MODEL);
|
||||
sent.put("appVersion", getVersionName(context));
|
||||
sent.put("osVersion", Build.VERSION.RELEASE);
|
||||
sent.put("packageName", context.getPackageName());
|
||||
sent.setTimestamp(System.currentTimeMillis());
|
||||
sendRequest(context, sent);
|
||||
}
|
||||
|
||||
protected static boolean autoBindAccount(Context context) {
|
||||
|
||||
String account = CIMCacheManager.getString(context, CIMCacheManager.KEY_ACCOUNT);
|
||||
if (account == null || account.trim().length() == 0 || isDestoryed(context)) {
|
||||
if (account == null || account.trim().length() == 0 || isDestroyed(context)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -146,13 +132,10 @@ public class CIMPushManager {
|
||||
|
||||
/**
|
||||
* 发送一个CIM请求
|
||||
*
|
||||
* @param context
|
||||
* @body
|
||||
*/
|
||||
public static void sendRequest(Context context, SentBody body) {
|
||||
|
||||
if (isDestoryed(context) || isStoped(context)) {
|
||||
if (isDestroyed(context) || isStopped(context)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -165,12 +148,10 @@ public class CIMPushManager {
|
||||
|
||||
/**
|
||||
* 停止接受推送,将会退出当前账号登录,端口与服务端的连接
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void stop(Context context) {
|
||||
|
||||
if (isDestoryed(context)) {
|
||||
if (isDestroyed(context)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -184,8 +165,6 @@ public class CIMPushManager {
|
||||
|
||||
/**
|
||||
* 完全销毁CIM,一般用于完全退出程序,调用resume将不能恢复
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void destroy(Context context) {
|
||||
|
||||
@ -198,23 +177,21 @@ public class CIMPushManager {
|
||||
|
||||
/**
|
||||
* 重新恢复接收推送,重新连接服务端,并登录当前账号
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void resume(Context context) {
|
||||
|
||||
if (isDestoryed(context)) {
|
||||
if (isDestroyed(context)) {
|
||||
return;
|
||||
}
|
||||
|
||||
autoBindAccount(context);
|
||||
}
|
||||
|
||||
public static boolean isDestoryed(Context context) {
|
||||
public static boolean isDestroyed(Context context) {
|
||||
return CIMCacheManager.getBoolean(context, CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
}
|
||||
|
||||
public static boolean isStoped(Context context) {
|
||||
public static boolean isStopped(Context context) {
|
||||
return CIMCacheManager.getBoolean(context, CIMCacheManager.KEY_MANUAL_STOP);
|
||||
}
|
||||
|
||||
@ -243,15 +220,28 @@ public class CIMPushManager {
|
||||
|
||||
|
||||
private static String getVersionName(Context context) {
|
||||
String versionName = null;
|
||||
|
||||
try {
|
||||
PackageInfo mPackageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
|
||||
versionName = mPackageInfo.versionName;
|
||||
return mPackageInfo.versionName;
|
||||
} catch (NameNotFoundException ignore) {
|
||||
}
|
||||
return versionName;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String getDeviceId(Context context){
|
||||
|
||||
String currDeviceId = CIMCacheManager.getString(context, CIMCacheManager.KEY_DEVICE_ID);
|
||||
|
||||
if (!TextUtils.isEmpty(currDeviceId)) {
|
||||
return currDeviceId;
|
||||
}
|
||||
|
||||
String deviceId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
|
||||
|
||||
CIMCacheManager.putString(context, CIMCacheManager.KEY_DEVICE_ID,deviceId);
|
||||
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -35,7 +35,6 @@ import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
|
||||
import com.farsunset.cim.sdk.android.coder.CIMLogger;
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.SentBody;
|
||||
@ -122,9 +121,7 @@ public class CIMPushService extends Service {
|
||||
startForeground(NOTIFICATION_ID,notification);
|
||||
}
|
||||
|
||||
intent = (intent == null ? new Intent(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE) : intent);
|
||||
|
||||
String action = intent.getAction();
|
||||
String action = intent == null ? CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE : intent.getAction();
|
||||
|
||||
if (CIMPushManager.ACTION_CREATE_CIM_CONNECTION.equals(action)) {
|
||||
connect(intent.getLongExtra(KEY_DELAYED_TIME, 0));
|
||||
@ -142,7 +139,7 @@ public class CIMPushService extends Service {
|
||||
handleKeepAlive();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_SET_LOGGER_EANABLE.equals(action)) {
|
||||
if (CIMPushManager.ACTION_SET_LOGGER_EATABLE.equals(action)) {
|
||||
boolean enable = intent.getBooleanExtra(KEY_LOGGER_ENABLE, true);
|
||||
CIMLogger.getLogger().debugMode(enable);
|
||||
}
|
||||
@ -167,12 +164,12 @@ public class CIMPushService extends Service {
|
||||
|
||||
private void connect() {
|
||||
|
||||
if(CIMPushManager.isDestoryed(this) || CIMPushManager.isStoped(this)) {
|
||||
if(CIMPushManager.isDestroyed(this) || CIMPushManager.isStopped(this)) {
|
||||
return;
|
||||
}
|
||||
|
||||
String host = CIMCacheManager.getString(this, CIMCacheManager.KEY_CIM_SERVIER_HOST);
|
||||
int port = CIMCacheManager.getInt(this, CIMCacheManager.KEY_CIM_SERVIER_PORT);
|
||||
String host = CIMCacheManager.getString(this, CIMCacheManager.KEY_CIM_SERVER_HOST);
|
||||
int port = CIMCacheManager.getInt(this, CIMCacheManager.KEY_CIM_SERVER_PORT);
|
||||
|
||||
if(host == null || host.trim().length() == 0 || port <= 0) {
|
||||
Log.e(this.getClass().getSimpleName(), "Invalid hostname or port. host:" + host + " port:" + port);
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,10 +21,10 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.coder;
|
||||
|
||||
import java.nio.channels.SocketChannel;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import java.nio.channels.SocketChannel;
|
||||
|
||||
|
||||
/**
|
||||
* 日志打印,添加session 的id和ip address
|
||||
@ -105,7 +105,7 @@ public class CIMLogger {
|
||||
|
||||
public void connectState(boolean isConnected,boolean isManualStop,boolean isDestroyed) {
|
||||
if(debug) {
|
||||
Log.d(TAG,"CONNECTED:" + isConnected + " STOPED:"+isManualStop+ " DESTROYED:"+isDestroyed);
|
||||
Log.d(TAG,"CONNECTED:" + isConnected + " STOPPED:"+isManualStop+ " DESTROYED:"+isDestroyed);
|
||||
}
|
||||
}
|
||||
private String getSessionInfo(SocketChannel session) {
|
||||
@ -118,7 +118,7 @@ public class CIMLogger {
|
||||
|
||||
try {
|
||||
if (session.socket().getLocalAddress() != null) {
|
||||
builder.append(" L:").append(session.socket().getLocalAddress()+":"+session.socket().getLocalPort());
|
||||
builder.append(" L:").append(session.socket().getLocalAddress()).append(":").append(session.socket().getLocalPort());
|
||||
}
|
||||
} catch (Exception ignore) {
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -22,9 +22,6 @@
|
||||
package com.farsunset.cim.sdk.android.coder;
|
||||
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.HeartbeatRequest;
|
||||
import com.farsunset.cim.sdk.android.model.Message;
|
||||
@ -33,43 +30,47 @@ import com.farsunset.cim.sdk.android.model.proto.MessageProto;
|
||||
import com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* 客户端消息解码
|
||||
*/
|
||||
public class ClientMessageDecoder {
|
||||
|
||||
|
||||
public Object doDecode(ByteBuffer iobuffer) {
|
||||
public Object doDecode(ByteBuffer buffer) {
|
||||
|
||||
/**
|
||||
/*
|
||||
* 消息头3位
|
||||
*/
|
||||
if (iobuffer.remaining() < CIMConstant.DATA_HEADER_LENGTH) {
|
||||
if (buffer.remaining() < CIMConstant.DATA_HEADER_LENGTH) {
|
||||
return null;
|
||||
}
|
||||
|
||||
iobuffer.mark();
|
||||
buffer.mark();
|
||||
|
||||
byte conetnType = iobuffer.get();
|
||||
byte type = buffer.get();
|
||||
|
||||
byte lv = iobuffer.get();// int 低位
|
||||
byte hv = iobuffer.get();// int 高位
|
||||
byte lv = buffer.get();
|
||||
byte hv = buffer.get();
|
||||
|
||||
int conetnLength = getContentLength(lv, hv);
|
||||
int length = getContentLength(lv, hv);
|
||||
|
||||
// 如果消息体没有接收完整,则重置读取,等待下一次重新读取
|
||||
if (conetnLength > iobuffer.remaining()) {
|
||||
iobuffer.reset();
|
||||
/*
|
||||
*如果消息体没有接收完整,则重置读取,等待下一次重新读取
|
||||
*/
|
||||
if (length > buffer.remaining()) {
|
||||
buffer.reset();
|
||||
return null;
|
||||
}
|
||||
|
||||
byte[] dataBytes = new byte[conetnLength];
|
||||
iobuffer.get(dataBytes, 0, conetnLength);
|
||||
byte[] dataBytes = new byte[length];
|
||||
buffer.get(dataBytes, 0, length);
|
||||
|
||||
iobuffer.position(0);
|
||||
buffer.position(0);
|
||||
|
||||
try {
|
||||
return mappingMessageObject(dataBytes, conetnType);
|
||||
return mappingMessageObject(dataBytes, type);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
return null;
|
||||
}
|
||||
@ -79,11 +80,10 @@ public class ClientMessageDecoder {
|
||||
private Object mappingMessageObject(byte[] bytes, byte type) throws InvalidProtocolBufferException {
|
||||
|
||||
if (CIMConstant.ProtobufType.S_H_RQ == type) {
|
||||
HeartbeatRequest request = HeartbeatRequest.getInstance();
|
||||
return request;
|
||||
return HeartbeatRequest.getInstance();
|
||||
}
|
||||
|
||||
if (CIMConstant.ProtobufType.REPLYBODY == type) {
|
||||
if (CIMConstant.ProtobufType.REPLY_BODY == type) {
|
||||
ReplyBodyProto.Model bodyProto = ReplyBodyProto.Model.parseFrom(bytes);
|
||||
ReplyBody body = new ReplyBody();
|
||||
body.setKey(bodyProto.getKey());
|
||||
@ -115,15 +115,11 @@ public class ClientMessageDecoder {
|
||||
|
||||
/**
|
||||
* 解析消息体长度
|
||||
*
|
||||
* @param type
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
private int getContentLength(byte lv, byte hv) {
|
||||
int l = (lv & 0xff);
|
||||
int h = (hv & 0xff);
|
||||
return (l | (h <<= 8));
|
||||
return (l | h << 8);
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,11 +21,11 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.coder;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.Protobufable;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* 客户端消息发送前进行编码
|
||||
*/
|
||||
@ -36,22 +36,18 @@ public class ClientMessageEncoder {
|
||||
Protobufable data = (Protobufable) object;
|
||||
byte[] byteArray = data.getByteArray();
|
||||
|
||||
ByteBuffer iobuffer = ByteBuffer.allocate(byteArray.length + CIMConstant.DATA_HEADER_LENGTH);
|
||||
ByteBuffer buffer = ByteBuffer.allocate(byteArray.length + CIMConstant.DATA_HEADER_LENGTH);
|
||||
|
||||
iobuffer.put(createHeader(data.getType(), byteArray.length));
|
||||
iobuffer.put(byteArray);
|
||||
iobuffer.flip();
|
||||
buffer.put(createHeader(data.getType(), byteArray.length));
|
||||
buffer.put(byteArray);
|
||||
buffer.flip();
|
||||
|
||||
return iobuffer;
|
||||
return buffer;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息体最大为65535
|
||||
*
|
||||
* @param type
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
private byte[] createHeader(byte type, int length) {
|
||||
byte[] header = new byte[CIMConstant.DATA_HEADER_LENGTH];
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -26,12 +26,14 @@ package com.farsunset.cim.sdk.android.constant;
|
||||
*/
|
||||
public interface CIMConstant {
|
||||
|
||||
long RECONN_INTERVAL_TIME = 30 * 1000;
|
||||
long RECONNECT_INTERVAL_TIME = 30 * 1000;
|
||||
|
||||
// 消息头长度为3个字节,第一个字节为消息类型,第二,第三字节 转换int后为消息长度
|
||||
/**
|
||||
消息头长度为3个字节,第一个字节为消息类型,第二,第三字节 转换int后为消息长度
|
||||
*/
|
||||
int DATA_HEADER_LENGTH = 3;
|
||||
|
||||
public static interface ReturnCode {
|
||||
interface ReturnCode {
|
||||
|
||||
String CODE_404 = "404";
|
||||
|
||||
@ -47,15 +49,15 @@ public interface CIMConstant {
|
||||
|
||||
}
|
||||
|
||||
public static interface ProtobufType {
|
||||
interface ProtobufType {
|
||||
byte C_H_RS = 0;
|
||||
byte S_H_RQ = 1;
|
||||
byte MESSAGE = 2;
|
||||
byte SENTBODY = 3;
|
||||
byte REPLYBODY = 4;
|
||||
byte SENT_BODY = 3;
|
||||
byte REPLY_BODY = 4;
|
||||
}
|
||||
|
||||
public static interface RequestKey {
|
||||
interface RequestKey {
|
||||
|
||||
String CLIENT_BIND = "client_bind";
|
||||
|
||||
@ -63,36 +65,54 @@ public interface CIMConstant {
|
||||
|
||||
}
|
||||
|
||||
public static interface MessageAction {
|
||||
interface MessageAction {
|
||||
|
||||
// 被其他设备登录挤下线消息
|
||||
/*
|
||||
被其他设备登录挤下线消息
|
||||
*/
|
||||
String ACTION_999 = "999";
|
||||
}
|
||||
|
||||
public static interface IntentAction {
|
||||
interface IntentAction {
|
||||
|
||||
// 消息广播action
|
||||
/*
|
||||
消息广播action
|
||||
*/
|
||||
String ACTION_MESSAGE_RECEIVED = "com.farsunset.cim.MESSAGE_RECEIVED";
|
||||
|
||||
// 发送sendbody成功广播
|
||||
String ACTION_SENT_SUCCESSED = "com.farsunset.cim.SENT_SUCCESSED";
|
||||
/*
|
||||
发送sendBody成功广播
|
||||
*/
|
||||
String ACTION_SEND_FINISHED = "com.farsunset.cim.SEND_FINISHED";
|
||||
|
||||
// 链接意外关闭广播
|
||||
/*
|
||||
链接意外关闭广播
|
||||
*/
|
||||
String ACTION_CONNECTION_CLOSED = "com.farsunset.cim.CONNECTION_CLOSED";
|
||||
|
||||
// 链接失败广播
|
||||
String ACTION_CONNECTION_FAILED = "com.farsunset.cim.CONNECTION_FAILED";
|
||||
/*
|
||||
链接失败广播
|
||||
*/
|
||||
String ACTION_CONNECT_FAILED = "com.farsunset.cim.CONNECT_FAILED";
|
||||
|
||||
// 链接成功广播
|
||||
String ACTION_CONNECTION_SUCCESSED = "com.farsunset.cim.CONNECTION_SUCCESSED";
|
||||
/*
|
||||
链接成功广播
|
||||
*/
|
||||
String ACTION_CONNECT_FINISHED = "com.farsunset.cim.CONNECT_FINISHED";
|
||||
|
||||
// 发送sendbody成功后获得replaybody回应广播
|
||||
/*
|
||||
发送sendBody成功后获得replayBody回应广播
|
||||
*/
|
||||
String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED";
|
||||
|
||||
// 网络变化广播
|
||||
/*
|
||||
网络变化广播
|
||||
*/
|
||||
String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED";
|
||||
|
||||
// 重试连接
|
||||
/*
|
||||
重试连接
|
||||
*/
|
||||
String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY";
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,10 +21,10 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 服务端心跳请求
|
||||
*
|
||||
@ -50,6 +50,7 @@ public class HeartbeatRequest implements Serializable, Protobufable {
|
||||
return CMD_HEARTBEAT_REQUEST.getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return TAG;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,10 +21,10 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 客户端心跳响应
|
||||
*/
|
||||
@ -49,6 +49,7 @@ public class HeartbeatResponse implements Serializable, Protobufable {
|
||||
return CMD_HEARTBEAT_RESPONSE.getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return TAG;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -137,6 +137,7 @@ public class Message implements Serializable {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuffer buffer = new StringBuffer();
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -108,6 +108,7 @@ public class ReplyBody implements Serializable {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("#ReplyBody#").append("\n");
|
||||
@ -115,13 +116,11 @@ public class ReplyBody implements Serializable {
|
||||
buffer.append("timestamp:").append(timestamp).append("\n");
|
||||
buffer.append("code:").append(code).append("\n");
|
||||
|
||||
if (!data.isEmpty()) {
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
|
||||
return buffer.toString();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,13 +21,13 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.android.model;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.proto.SentBodyProto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Set;
|
||||
|
||||
import com.farsunset.cim.sdk.android.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.android.model.proto.SentBodyProto;
|
||||
|
||||
/**
|
||||
* java |android 客户端请求结构
|
||||
*
|
||||
@ -85,16 +85,13 @@ public class SentBody implements Serializable, Protobufable {
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("#SentBody#").append("\n");
|
||||
;
|
||||
buffer.append("key:").append(key).append("\n");
|
||||
buffer.append("timestamp:").append(timestamp).append("\n");
|
||||
if (!data.isEmpty()) {
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@ -111,7 +108,7 @@ public class SentBody implements Serializable, Protobufable {
|
||||
|
||||
@Override
|
||||
public byte getType() {
|
||||
return CIMConstant.ProtobufType.SENTBODY;
|
||||
return CIMConstant.ProtobufType.SENT_BODY;
|
||||
}
|
||||
|
||||
}
|
@ -20,7 +20,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string action = 2;</code>
|
||||
*/
|
||||
java.lang.String getAction();
|
||||
String getAction();
|
||||
/**
|
||||
* <code>optional string action = 2;</code>
|
||||
*/
|
||||
@ -30,7 +30,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string content = 3;</code>
|
||||
*/
|
||||
java.lang.String getContent();
|
||||
String getContent();
|
||||
/**
|
||||
* <code>optional string content = 3;</code>
|
||||
*/
|
||||
@ -40,7 +40,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string sender = 4;</code>
|
||||
*/
|
||||
java.lang.String getSender();
|
||||
String getSender();
|
||||
/**
|
||||
* <code>optional string sender = 4;</code>
|
||||
*/
|
||||
@ -50,7 +50,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string receiver = 5;</code>
|
||||
*/
|
||||
java.lang.String getReceiver();
|
||||
String getReceiver();
|
||||
/**
|
||||
* <code>optional string receiver = 5;</code>
|
||||
*/
|
||||
@ -60,7 +60,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string extra = 6;</code>
|
||||
*/
|
||||
java.lang.String getExtra();
|
||||
String getExtra();
|
||||
/**
|
||||
* <code>optional string extra = 6;</code>
|
||||
*/
|
||||
@ -70,7 +70,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string title = 7;</code>
|
||||
*/
|
||||
java.lang.String getTitle();
|
||||
String getTitle();
|
||||
/**
|
||||
* <code>optional string title = 7;</code>
|
||||
*/
|
||||
@ -80,7 +80,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string format = 8;</code>
|
||||
*/
|
||||
java.lang.String getFormat();
|
||||
String getFormat();
|
||||
/**
|
||||
* <code>optional string format = 8;</code>
|
||||
*/
|
||||
@ -133,11 +133,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int ACTION_FIELD_NUMBER = 2;
|
||||
private java.lang.String action_;
|
||||
private String action_;
|
||||
/**
|
||||
* <code>optional string action = 2;</code>
|
||||
*/
|
||||
public java.lang.String getAction() {
|
||||
public String getAction() {
|
||||
return action_;
|
||||
}
|
||||
/**
|
||||
@ -151,7 +151,7 @@ public final class MessageProto {
|
||||
* <code>optional string action = 2;</code>
|
||||
*/
|
||||
private void setAction(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -179,11 +179,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int CONTENT_FIELD_NUMBER = 3;
|
||||
private java.lang.String content_;
|
||||
private String content_;
|
||||
/**
|
||||
* <code>optional string content = 3;</code>
|
||||
*/
|
||||
public java.lang.String getContent() {
|
||||
public String getContent() {
|
||||
return content_;
|
||||
}
|
||||
/**
|
||||
@ -197,7 +197,7 @@ public final class MessageProto {
|
||||
* <code>optional string content = 3;</code>
|
||||
*/
|
||||
private void setContent(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -225,11 +225,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int SENDER_FIELD_NUMBER = 4;
|
||||
private java.lang.String sender_;
|
||||
private String sender_;
|
||||
/**
|
||||
* <code>optional string sender = 4;</code>
|
||||
*/
|
||||
public java.lang.String getSender() {
|
||||
public String getSender() {
|
||||
return sender_;
|
||||
}
|
||||
/**
|
||||
@ -243,7 +243,7 @@ public final class MessageProto {
|
||||
* <code>optional string sender = 4;</code>
|
||||
*/
|
||||
private void setSender(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -271,11 +271,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int RECEIVER_FIELD_NUMBER = 5;
|
||||
private java.lang.String receiver_;
|
||||
private String receiver_;
|
||||
/**
|
||||
* <code>optional string receiver = 5;</code>
|
||||
*/
|
||||
public java.lang.String getReceiver() {
|
||||
public String getReceiver() {
|
||||
return receiver_;
|
||||
}
|
||||
/**
|
||||
@ -289,7 +289,7 @@ public final class MessageProto {
|
||||
* <code>optional string receiver = 5;</code>
|
||||
*/
|
||||
private void setReceiver(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -317,11 +317,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int EXTRA_FIELD_NUMBER = 6;
|
||||
private java.lang.String extra_;
|
||||
private String extra_;
|
||||
/**
|
||||
* <code>optional string extra = 6;</code>
|
||||
*/
|
||||
public java.lang.String getExtra() {
|
||||
public String getExtra() {
|
||||
return extra_;
|
||||
}
|
||||
/**
|
||||
@ -335,7 +335,7 @@ public final class MessageProto {
|
||||
* <code>optional string extra = 6;</code>
|
||||
*/
|
||||
private void setExtra(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -363,11 +363,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int TITLE_FIELD_NUMBER = 7;
|
||||
private java.lang.String title_;
|
||||
private String title_;
|
||||
/**
|
||||
* <code>optional string title = 7;</code>
|
||||
*/
|
||||
public java.lang.String getTitle() {
|
||||
public String getTitle() {
|
||||
return title_;
|
||||
}
|
||||
/**
|
||||
@ -381,7 +381,7 @@ public final class MessageProto {
|
||||
* <code>optional string title = 7;</code>
|
||||
*/
|
||||
private void setTitle(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -409,11 +409,11 @@ public final class MessageProto {
|
||||
}
|
||||
|
||||
public static final int FORMAT_FIELD_NUMBER = 8;
|
||||
private java.lang.String format_;
|
||||
private String format_;
|
||||
/**
|
||||
* <code>optional string format = 8;</code>
|
||||
*/
|
||||
public java.lang.String getFormat() {
|
||||
public String getFormat() {
|
||||
return format_;
|
||||
}
|
||||
/**
|
||||
@ -427,7 +427,7 @@ public final class MessageProto {
|
||||
* <code>optional string format = 8;</code>
|
||||
*/
|
||||
private void setFormat(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -553,60 +553,60 @@ public final class MessageProto {
|
||||
return size;
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.ByteString data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.ByteString data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(byte[] data)
|
||||
public static Model parseFrom(byte[] data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
byte[] data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(java.io.InputStream input)
|
||||
public static Model parseFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseDelimitedFrom(java.io.InputStream input)
|
||||
public static Model parseDelimitedFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return parseDelimitedFrom(DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseDelimitedFrom(
|
||||
public static Model parseDelimitedFrom(
|
||||
java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
@ -617,7 +617,7 @@ public final class MessageProto {
|
||||
public static Builder newBuilder() {
|
||||
return DEFAULT_INSTANCE.toBuilder();
|
||||
}
|
||||
public static Builder newBuilder(com.farsunset.cim.sdk.android.model.proto.MessageProto.Model prototype) {
|
||||
public static Builder newBuilder(Model prototype) {
|
||||
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
|
||||
}
|
||||
|
||||
@ -626,9 +626,9 @@ public final class MessageProto {
|
||||
*/
|
||||
public static final class Builder extends
|
||||
com.google.protobuf.GeneratedMessageLite.Builder<
|
||||
com.farsunset.cim.sdk.android.model.proto.MessageProto.Model, Builder> implements
|
||||
Model, Builder> implements
|
||||
// @@protoc_insertion_point(builder_implements:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
com.farsunset.cim.sdk.android.model.proto.MessageProto.ModelOrBuilder {
|
||||
ModelOrBuilder {
|
||||
// Construct using com.farsunset.cim.sdk.android.model.proto.MessageProto.Model.newBuilder()
|
||||
private Builder() {
|
||||
super(DEFAULT_INSTANCE);
|
||||
@ -661,7 +661,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string action = 2;</code>
|
||||
*/
|
||||
public java.lang.String getAction() {
|
||||
public String getAction() {
|
||||
return instance.getAction();
|
||||
}
|
||||
/**
|
||||
@ -675,7 +675,7 @@ public final class MessageProto {
|
||||
* <code>optional string action = 2;</code>
|
||||
*/
|
||||
public Builder setAction(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setAction(value);
|
||||
return this;
|
||||
@ -701,7 +701,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string content = 3;</code>
|
||||
*/
|
||||
public java.lang.String getContent() {
|
||||
public String getContent() {
|
||||
return instance.getContent();
|
||||
}
|
||||
/**
|
||||
@ -715,7 +715,7 @@ public final class MessageProto {
|
||||
* <code>optional string content = 3;</code>
|
||||
*/
|
||||
public Builder setContent(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setContent(value);
|
||||
return this;
|
||||
@ -741,7 +741,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string sender = 4;</code>
|
||||
*/
|
||||
public java.lang.String getSender() {
|
||||
public String getSender() {
|
||||
return instance.getSender();
|
||||
}
|
||||
/**
|
||||
@ -755,7 +755,7 @@ public final class MessageProto {
|
||||
* <code>optional string sender = 4;</code>
|
||||
*/
|
||||
public Builder setSender(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setSender(value);
|
||||
return this;
|
||||
@ -781,7 +781,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string receiver = 5;</code>
|
||||
*/
|
||||
public java.lang.String getReceiver() {
|
||||
public String getReceiver() {
|
||||
return instance.getReceiver();
|
||||
}
|
||||
/**
|
||||
@ -795,7 +795,7 @@ public final class MessageProto {
|
||||
* <code>optional string receiver = 5;</code>
|
||||
*/
|
||||
public Builder setReceiver(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setReceiver(value);
|
||||
return this;
|
||||
@ -821,7 +821,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string extra = 6;</code>
|
||||
*/
|
||||
public java.lang.String getExtra() {
|
||||
public String getExtra() {
|
||||
return instance.getExtra();
|
||||
}
|
||||
/**
|
||||
@ -835,7 +835,7 @@ public final class MessageProto {
|
||||
* <code>optional string extra = 6;</code>
|
||||
*/
|
||||
public Builder setExtra(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setExtra(value);
|
||||
return this;
|
||||
@ -861,7 +861,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string title = 7;</code>
|
||||
*/
|
||||
public java.lang.String getTitle() {
|
||||
public String getTitle() {
|
||||
return instance.getTitle();
|
||||
}
|
||||
/**
|
||||
@ -875,7 +875,7 @@ public final class MessageProto {
|
||||
* <code>optional string title = 7;</code>
|
||||
*/
|
||||
public Builder setTitle(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setTitle(value);
|
||||
return this;
|
||||
@ -901,7 +901,7 @@ public final class MessageProto {
|
||||
/**
|
||||
* <code>optional string format = 8;</code>
|
||||
*/
|
||||
public java.lang.String getFormat() {
|
||||
public String getFormat() {
|
||||
return instance.getFormat();
|
||||
}
|
||||
/**
|
||||
@ -915,7 +915,7 @@ public final class MessageProto {
|
||||
* <code>optional string format = 8;</code>
|
||||
*/
|
||||
public Builder setFormat(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setFormat(value);
|
||||
return this;
|
||||
@ -964,11 +964,11 @@ public final class MessageProto {
|
||||
// @@protoc_insertion_point(builder_scope:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
}
|
||||
protected final Object dynamicMethod(
|
||||
com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
|
||||
MethodToInvoke method,
|
||||
Object arg0, Object arg1) {
|
||||
switch (method) {
|
||||
case NEW_MUTABLE_INSTANCE: {
|
||||
return new com.farsunset.cim.sdk.android.model.proto.MessageProto.Model();
|
||||
return new Model();
|
||||
}
|
||||
case IS_INITIALIZED: {
|
||||
return DEFAULT_INSTANCE;
|
||||
@ -981,7 +981,7 @@ public final class MessageProto {
|
||||
}
|
||||
case VISIT: {
|
||||
Visitor visitor = (Visitor) arg0;
|
||||
com.farsunset.cim.sdk.android.model.proto.MessageProto.Model other = (com.farsunset.cim.sdk.android.model.proto.MessageProto.Model) arg1;
|
||||
Model other = (Model) arg1;
|
||||
id_ = visitor.visitLong(id_ != 0L, id_,
|
||||
other.id_ != 0L, other.id_);
|
||||
action_ = visitor.visitString(!action_.isEmpty(), action_,
|
||||
@ -1000,7 +1000,7 @@ public final class MessageProto {
|
||||
!other.format_.isEmpty(), other.format_);
|
||||
timestamp_ = visitor.visitLong(timestamp_ != 0L, timestamp_,
|
||||
other.timestamp_ != 0L, other.timestamp_);
|
||||
if (visitor == com.google.protobuf.GeneratedMessageLite.MergeFromVisitor
|
||||
if (visitor == MergeFromVisitor
|
||||
.INSTANCE) {
|
||||
}
|
||||
return this;
|
||||
@ -1091,7 +1091,7 @@ public final class MessageProto {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
case GET_PARSER: {
|
||||
if (PARSER == null) { synchronized (com.farsunset.cim.sdk.android.model.proto.MessageProto.Model.class) {
|
||||
if (PARSER == null) { synchronized (Model.class) {
|
||||
if (PARSER == null) {
|
||||
PARSER = new DefaultInstanceBasedParser(DEFAULT_INSTANCE);
|
||||
}
|
||||
@ -1105,13 +1105,13 @@ public final class MessageProto {
|
||||
|
||||
|
||||
// @@protoc_insertion_point(class_scope:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
private static final com.farsunset.cim.sdk.android.model.proto.MessageProto.Model DEFAULT_INSTANCE;
|
||||
private static final Model DEFAULT_INSTANCE;
|
||||
static {
|
||||
DEFAULT_INSTANCE = new Model();
|
||||
DEFAULT_INSTANCE.makeImmutable();
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.android.model.proto.MessageProto.Model getDefaultInstance() {
|
||||
public static Model getDefaultInstance() {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
java.lang.String getKey();
|
||||
String getKey();
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
@ -25,7 +25,7 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* <code>optional string code = 2;</code>
|
||||
*/
|
||||
java.lang.String getCode();
|
||||
String getCode();
|
||||
/**
|
||||
* <code>optional string code = 2;</code>
|
||||
*/
|
||||
@ -35,7 +35,7 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* <code>optional string message = 3;</code>
|
||||
*/
|
||||
java.lang.String getMessage();
|
||||
String getMessage();
|
||||
/**
|
||||
* <code>optional string message = 3;</code>
|
||||
*/
|
||||
@ -55,31 +55,31 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
boolean containsData(
|
||||
java.lang.String key);
|
||||
String key);
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
java.util.Map<java.lang.String, java.lang.String>
|
||||
@Deprecated
|
||||
java.util.Map<String, String>
|
||||
getData();
|
||||
/**
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
java.util.Map<java.lang.String, java.lang.String>
|
||||
java.util.Map<String, String>
|
||||
getDataMap();
|
||||
/**
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
java.lang.String getDataOrDefault(
|
||||
java.lang.String key,
|
||||
java.lang.String defaultValue);
|
||||
String getDataOrDefault(
|
||||
String key,
|
||||
String defaultValue);
|
||||
/**
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
java.lang.String getDataOrThrow(
|
||||
java.lang.String key);
|
||||
String getDataOrThrow(
|
||||
String key);
|
||||
}
|
||||
/**
|
||||
* Protobuf type {@code com.farsunset.cim.sdk.android.model.proto.Model}
|
||||
@ -96,11 +96,11 @@ public final class ReplyBodyProto {
|
||||
}
|
||||
private int bitField0_;
|
||||
public static final int KEY_FIELD_NUMBER = 1;
|
||||
private java.lang.String key_;
|
||||
private String key_;
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
public java.lang.String getKey() {
|
||||
public String getKey() {
|
||||
return key_;
|
||||
}
|
||||
/**
|
||||
@ -114,7 +114,7 @@ public final class ReplyBodyProto {
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
private void setKey(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -142,11 +142,11 @@ public final class ReplyBodyProto {
|
||||
}
|
||||
|
||||
public static final int CODE_FIELD_NUMBER = 2;
|
||||
private java.lang.String code_;
|
||||
private String code_;
|
||||
/**
|
||||
* <code>optional string code = 2;</code>
|
||||
*/
|
||||
public java.lang.String getCode() {
|
||||
public String getCode() {
|
||||
return code_;
|
||||
}
|
||||
/**
|
||||
@ -160,7 +160,7 @@ public final class ReplyBodyProto {
|
||||
* <code>optional string code = 2;</code>
|
||||
*/
|
||||
private void setCode(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -188,11 +188,11 @@ public final class ReplyBodyProto {
|
||||
}
|
||||
|
||||
public static final int MESSAGE_FIELD_NUMBER = 3;
|
||||
private java.lang.String message_;
|
||||
private String message_;
|
||||
/**
|
||||
* <code>optional string message = 3;</code>
|
||||
*/
|
||||
public java.lang.String getMessage() {
|
||||
public String getMessage() {
|
||||
return message_;
|
||||
}
|
||||
/**
|
||||
@ -206,7 +206,7 @@ public final class ReplyBodyProto {
|
||||
* <code>optional string message = 3;</code>
|
||||
*/
|
||||
private void setMessage(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -259,22 +259,22 @@ public final class ReplyBodyProto {
|
||||
public static final int DATA_FIELD_NUMBER = 5;
|
||||
private static final class DataDefaultEntryHolder {
|
||||
static final com.google.protobuf.MapEntryLite<
|
||||
java.lang.String, java.lang.String> defaultEntry =
|
||||
String, String> defaultEntry =
|
||||
com.google.protobuf.MapEntryLite
|
||||
.<java.lang.String, java.lang.String>newDefaultInstance(
|
||||
.<String, String>newDefaultInstance(
|
||||
com.google.protobuf.WireFormat.FieldType.STRING,
|
||||
"",
|
||||
com.google.protobuf.WireFormat.FieldType.STRING,
|
||||
"");
|
||||
}
|
||||
private com.google.protobuf.MapFieldLite<
|
||||
java.lang.String, java.lang.String> data_ =
|
||||
String, String> data_ =
|
||||
com.google.protobuf.MapFieldLite.emptyMapField();
|
||||
private com.google.protobuf.MapFieldLite<java.lang.String, java.lang.String>
|
||||
private com.google.protobuf.MapFieldLite<String, String>
|
||||
internalGetData() {
|
||||
return data_;
|
||||
}
|
||||
private com.google.protobuf.MapFieldLite<java.lang.String, java.lang.String>
|
||||
private com.google.protobuf.MapFieldLite<String, String>
|
||||
internalGetMutableData() {
|
||||
if (!data_.isMutable()) {
|
||||
data_ = data_.mutableCopy();
|
||||
@ -290,22 +290,22 @@ public final class ReplyBodyProto {
|
||||
*/
|
||||
|
||||
public boolean containsData(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
return internalGetData().containsKey(key);
|
||||
}
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getData() {
|
||||
@Deprecated
|
||||
public java.util.Map<String, String> getData() {
|
||||
return getDataMap();
|
||||
}
|
||||
/**
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
public java.util.Map<java.lang.String, java.lang.String> getDataMap() {
|
||||
public java.util.Map<String, String> getDataMap() {
|
||||
return java.util.Collections.unmodifiableMap(
|
||||
internalGetData());
|
||||
}
|
||||
@ -313,11 +313,11 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrDefault(
|
||||
java.lang.String key,
|
||||
java.lang.String defaultValue) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrDefault(
|
||||
String key,
|
||||
String defaultValue) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
internalGetData();
|
||||
return map.containsKey(key) ? map.get(key) : defaultValue;
|
||||
}
|
||||
@ -325,20 +325,20 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrThrow(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrThrow(
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
internalGetData();
|
||||
if (!map.containsKey(key)) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
/**
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
private java.util.Map<java.lang.String, java.lang.String>
|
||||
private java.util.Map<String, String>
|
||||
getMutableDataMap() {
|
||||
return internalGetMutableData();
|
||||
}
|
||||
@ -357,7 +357,7 @@ public final class ReplyBodyProto {
|
||||
if (timestamp_ != 0L) {
|
||||
output.writeInt64(4, timestamp_);
|
||||
}
|
||||
for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
|
||||
for (java.util.Map.Entry<String, String> entry
|
||||
: internalGetData().entrySet()) {
|
||||
DataDefaultEntryHolder.defaultEntry.serializeTo(
|
||||
output, 5, entry.getKey(), entry.getValue());
|
||||
@ -385,7 +385,7 @@ public final class ReplyBodyProto {
|
||||
size += com.google.protobuf.CodedOutputStream
|
||||
.computeInt64Size(4, timestamp_);
|
||||
}
|
||||
for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
|
||||
for (java.util.Map.Entry<String, String> entry
|
||||
: internalGetData().entrySet()) {
|
||||
size += DataDefaultEntryHolder.defaultEntry.computeMessageSize(
|
||||
5, entry.getKey(), entry.getValue());
|
||||
@ -394,60 +394,60 @@ public final class ReplyBodyProto {
|
||||
return size;
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.ByteString data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.ByteString data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(byte[] data)
|
||||
public static Model parseFrom(byte[] data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
byte[] data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(java.io.InputStream input)
|
||||
public static Model parseFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseDelimitedFrom(java.io.InputStream input)
|
||||
public static Model parseDelimitedFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return parseDelimitedFrom(DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseDelimitedFrom(
|
||||
public static Model parseDelimitedFrom(
|
||||
java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
@ -458,7 +458,7 @@ public final class ReplyBodyProto {
|
||||
public static Builder newBuilder() {
|
||||
return DEFAULT_INSTANCE.toBuilder();
|
||||
}
|
||||
public static Builder newBuilder(com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model prototype) {
|
||||
public static Builder newBuilder(Model prototype) {
|
||||
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
|
||||
}
|
||||
|
||||
@ -467,9 +467,9 @@ public final class ReplyBodyProto {
|
||||
*/
|
||||
public static final class Builder extends
|
||||
com.google.protobuf.GeneratedMessageLite.Builder<
|
||||
com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model, Builder> implements
|
||||
Model, Builder> implements
|
||||
// @@protoc_insertion_point(builder_implements:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.ModelOrBuilder {
|
||||
ModelOrBuilder {
|
||||
// Construct using com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model.newBuilder()
|
||||
private Builder() {
|
||||
super(DEFAULT_INSTANCE);
|
||||
@ -479,7 +479,7 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
public java.lang.String getKey() {
|
||||
public String getKey() {
|
||||
return instance.getKey();
|
||||
}
|
||||
/**
|
||||
@ -493,7 +493,7 @@ public final class ReplyBodyProto {
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
public Builder setKey(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setKey(value);
|
||||
return this;
|
||||
@ -519,7 +519,7 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* <code>optional string code = 2;</code>
|
||||
*/
|
||||
public java.lang.String getCode() {
|
||||
public String getCode() {
|
||||
return instance.getCode();
|
||||
}
|
||||
/**
|
||||
@ -533,7 +533,7 @@ public final class ReplyBodyProto {
|
||||
* <code>optional string code = 2;</code>
|
||||
*/
|
||||
public Builder setCode(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setCode(value);
|
||||
return this;
|
||||
@ -559,7 +559,7 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* <code>optional string message = 3;</code>
|
||||
*/
|
||||
public java.lang.String getMessage() {
|
||||
public String getMessage() {
|
||||
return instance.getMessage();
|
||||
}
|
||||
/**
|
||||
@ -573,7 +573,7 @@ public final class ReplyBodyProto {
|
||||
* <code>optional string message = 3;</code>
|
||||
*/
|
||||
public Builder setMessage(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setMessage(value);
|
||||
return this;
|
||||
@ -628,8 +628,8 @@ public final class ReplyBodyProto {
|
||||
*/
|
||||
|
||||
public boolean containsData(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
return instance.getDataMap().containsKey(key);
|
||||
}
|
||||
|
||||
@ -643,8 +643,8 @@ public final class ReplyBodyProto {
|
||||
*/
|
||||
|
||||
public Builder removeData(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
copyOnWrite();
|
||||
instance.getMutableDataMap().remove(key);
|
||||
return this;
|
||||
@ -652,14 +652,14 @@ public final class ReplyBodyProto {
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getData() {
|
||||
@Deprecated
|
||||
public java.util.Map<String, String> getData() {
|
||||
return getDataMap();
|
||||
}
|
||||
/**
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
public java.util.Map<java.lang.String, java.lang.String> getDataMap() {
|
||||
public java.util.Map<String, String> getDataMap() {
|
||||
return java.util.Collections.unmodifiableMap(
|
||||
instance.getDataMap());
|
||||
}
|
||||
@ -667,11 +667,11 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrDefault(
|
||||
java.lang.String key,
|
||||
java.lang.String defaultValue) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrDefault(
|
||||
String key,
|
||||
String defaultValue) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
instance.getDataMap();
|
||||
return map.containsKey(key) ? map.get(key) : defaultValue;
|
||||
}
|
||||
@ -679,13 +679,13 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrThrow(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrThrow(
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
instance.getDataMap();
|
||||
if (!map.containsKey(key)) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
@ -693,10 +693,10 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
public Builder putData(
|
||||
java.lang.String key,
|
||||
java.lang.String value) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
if (value == null) { throw new java.lang.NullPointerException(); }
|
||||
String key,
|
||||
String value) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
if (value == null) { throw new NullPointerException(); }
|
||||
copyOnWrite();
|
||||
instance.getMutableDataMap().put(key, value);
|
||||
return this;
|
||||
@ -705,7 +705,7 @@ public final class ReplyBodyProto {
|
||||
* <code>map<string, string> data = 5;</code>
|
||||
*/
|
||||
public Builder putAllData(
|
||||
java.util.Map<java.lang.String, java.lang.String> values) {
|
||||
java.util.Map<String, String> values) {
|
||||
copyOnWrite();
|
||||
instance.getMutableDataMap().putAll(values);
|
||||
return this;
|
||||
@ -714,11 +714,11 @@ public final class ReplyBodyProto {
|
||||
// @@protoc_insertion_point(builder_scope:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
}
|
||||
protected final Object dynamicMethod(
|
||||
com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
|
||||
MethodToInvoke method,
|
||||
Object arg0, Object arg1) {
|
||||
switch (method) {
|
||||
case NEW_MUTABLE_INSTANCE: {
|
||||
return new com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model();
|
||||
return new Model();
|
||||
}
|
||||
case IS_INITIALIZED: {
|
||||
return DEFAULT_INSTANCE;
|
||||
@ -732,7 +732,7 @@ public final class ReplyBodyProto {
|
||||
}
|
||||
case VISIT: {
|
||||
Visitor visitor = (Visitor) arg0;
|
||||
com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model other = (com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model) arg1;
|
||||
Model other = (Model) arg1;
|
||||
key_ = visitor.visitString(!key_.isEmpty(), key_,
|
||||
!other.key_.isEmpty(), other.key_);
|
||||
code_ = visitor.visitString(!code_.isEmpty(), code_,
|
||||
@ -743,7 +743,7 @@ public final class ReplyBodyProto {
|
||||
other.timestamp_ != 0L, other.timestamp_);
|
||||
data_ = visitor.visitMap(
|
||||
data_, other.internalGetData());
|
||||
if (visitor == com.google.protobuf.GeneratedMessageLite.MergeFromVisitor
|
||||
if (visitor == MergeFromVisitor
|
||||
.INSTANCE) {
|
||||
bitField0_ |= other.bitField0_;
|
||||
}
|
||||
@ -812,7 +812,7 @@ public final class ReplyBodyProto {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
case GET_PARSER: {
|
||||
if (PARSER == null) { synchronized (com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model.class) {
|
||||
if (PARSER == null) { synchronized (Model.class) {
|
||||
if (PARSER == null) {
|
||||
PARSER = new DefaultInstanceBasedParser(DEFAULT_INSTANCE);
|
||||
}
|
||||
@ -826,13 +826,13 @@ public final class ReplyBodyProto {
|
||||
|
||||
|
||||
// @@protoc_insertion_point(class_scope:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
private static final com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model DEFAULT_INSTANCE;
|
||||
private static final Model DEFAULT_INSTANCE;
|
||||
static {
|
||||
DEFAULT_INSTANCE = new Model();
|
||||
DEFAULT_INSTANCE.makeImmutable();
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.android.model.proto.ReplyBodyProto.Model getDefaultInstance() {
|
||||
public static Model getDefaultInstance() {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ public final class SentBodyProto {
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
java.lang.String getKey();
|
||||
String getKey();
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
@ -35,31 +35,31 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
boolean containsData(
|
||||
java.lang.String key);
|
||||
String key);
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
java.util.Map<java.lang.String, java.lang.String>
|
||||
@Deprecated
|
||||
java.util.Map<String, String>
|
||||
getData();
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
java.util.Map<java.lang.String, java.lang.String>
|
||||
java.util.Map<String, String>
|
||||
getDataMap();
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
java.lang.String getDataOrDefault(
|
||||
java.lang.String key,
|
||||
java.lang.String defaultValue);
|
||||
String getDataOrDefault(
|
||||
String key,
|
||||
String defaultValue);
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
java.lang.String getDataOrThrow(
|
||||
java.lang.String key);
|
||||
String getDataOrThrow(
|
||||
String key);
|
||||
}
|
||||
/**
|
||||
* Protobuf type {@code com.farsunset.cim.sdk.android.model.proto.Model}
|
||||
@ -74,11 +74,11 @@ public final class SentBodyProto {
|
||||
}
|
||||
private int bitField0_;
|
||||
public static final int KEY_FIELD_NUMBER = 1;
|
||||
private java.lang.String key_;
|
||||
private String key_;
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
public java.lang.String getKey() {
|
||||
public String getKey() {
|
||||
return key_;
|
||||
}
|
||||
/**
|
||||
@ -92,7 +92,7 @@ public final class SentBodyProto {
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
private void setKey(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
@ -145,22 +145,22 @@ public final class SentBodyProto {
|
||||
public static final int DATA_FIELD_NUMBER = 3;
|
||||
private static final class DataDefaultEntryHolder {
|
||||
static final com.google.protobuf.MapEntryLite<
|
||||
java.lang.String, java.lang.String> defaultEntry =
|
||||
String, String> defaultEntry =
|
||||
com.google.protobuf.MapEntryLite
|
||||
.<java.lang.String, java.lang.String>newDefaultInstance(
|
||||
.<String, String>newDefaultInstance(
|
||||
com.google.protobuf.WireFormat.FieldType.STRING,
|
||||
"",
|
||||
com.google.protobuf.WireFormat.FieldType.STRING,
|
||||
"");
|
||||
}
|
||||
private com.google.protobuf.MapFieldLite<
|
||||
java.lang.String, java.lang.String> data_ =
|
||||
String, String> data_ =
|
||||
com.google.protobuf.MapFieldLite.emptyMapField();
|
||||
private com.google.protobuf.MapFieldLite<java.lang.String, java.lang.String>
|
||||
private com.google.protobuf.MapFieldLite<String, String>
|
||||
internalGetData() {
|
||||
return data_;
|
||||
}
|
||||
private com.google.protobuf.MapFieldLite<java.lang.String, java.lang.String>
|
||||
private com.google.protobuf.MapFieldLite<String, String>
|
||||
internalGetMutableData() {
|
||||
if (!data_.isMutable()) {
|
||||
data_ = data_.mutableCopy();
|
||||
@ -176,22 +176,22 @@ public final class SentBodyProto {
|
||||
*/
|
||||
|
||||
public boolean containsData(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
return internalGetData().containsKey(key);
|
||||
}
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getData() {
|
||||
@Deprecated
|
||||
public java.util.Map<String, String> getData() {
|
||||
return getDataMap();
|
||||
}
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.util.Map<java.lang.String, java.lang.String> getDataMap() {
|
||||
public java.util.Map<String, String> getDataMap() {
|
||||
return java.util.Collections.unmodifiableMap(
|
||||
internalGetData());
|
||||
}
|
||||
@ -199,11 +199,11 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrDefault(
|
||||
java.lang.String key,
|
||||
java.lang.String defaultValue) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrDefault(
|
||||
String key,
|
||||
String defaultValue) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
internalGetData();
|
||||
return map.containsKey(key) ? map.get(key) : defaultValue;
|
||||
}
|
||||
@ -211,20 +211,20 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrThrow(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrThrow(
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
internalGetData();
|
||||
if (!map.containsKey(key)) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
private java.util.Map<java.lang.String, java.lang.String>
|
||||
private java.util.Map<String, String>
|
||||
getMutableDataMap() {
|
||||
return internalGetMutableData();
|
||||
}
|
||||
@ -237,7 +237,7 @@ public final class SentBodyProto {
|
||||
if (timestamp_ != 0L) {
|
||||
output.writeInt64(2, timestamp_);
|
||||
}
|
||||
for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
|
||||
for (java.util.Map.Entry<String, String> entry
|
||||
: internalGetData().entrySet()) {
|
||||
DataDefaultEntryHolder.defaultEntry.serializeTo(
|
||||
output, 3, entry.getKey(), entry.getValue());
|
||||
@ -257,7 +257,7 @@ public final class SentBodyProto {
|
||||
size += com.google.protobuf.CodedOutputStream
|
||||
.computeInt64Size(2, timestamp_);
|
||||
}
|
||||
for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
|
||||
for (java.util.Map.Entry<String, String> entry
|
||||
: internalGetData().entrySet()) {
|
||||
size += DataDefaultEntryHolder.defaultEntry.computeMessageSize(
|
||||
3, entry.getKey(), entry.getValue());
|
||||
@ -266,60 +266,60 @@ public final class SentBodyProto {
|
||||
return size;
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.ByteString data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.ByteString data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(byte[] data)
|
||||
public static Model parseFrom(byte[] data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
byte[] data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, data, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(java.io.InputStream input)
|
||||
public static Model parseFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseDelimitedFrom(java.io.InputStream input)
|
||||
public static Model parseDelimitedFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return parseDelimitedFrom(DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseDelimitedFrom(
|
||||
public static Model parseDelimitedFrom(
|
||||
java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageLite.parseFrom(
|
||||
DEFAULT_INSTANCE, input);
|
||||
}
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model parseFrom(
|
||||
public static Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
@ -330,7 +330,7 @@ public final class SentBodyProto {
|
||||
public static Builder newBuilder() {
|
||||
return DEFAULT_INSTANCE.toBuilder();
|
||||
}
|
||||
public static Builder newBuilder(com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model prototype) {
|
||||
public static Builder newBuilder(Model prototype) {
|
||||
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
|
||||
}
|
||||
|
||||
@ -339,9 +339,9 @@ public final class SentBodyProto {
|
||||
*/
|
||||
public static final class Builder extends
|
||||
com.google.protobuf.GeneratedMessageLite.Builder<
|
||||
com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model, Builder> implements
|
||||
Model, Builder> implements
|
||||
// @@protoc_insertion_point(builder_implements:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
com.farsunset.cim.sdk.android.model.proto.SentBodyProto.ModelOrBuilder {
|
||||
ModelOrBuilder {
|
||||
// Construct using com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model.newBuilder()
|
||||
private Builder() {
|
||||
super(DEFAULT_INSTANCE);
|
||||
@ -351,7 +351,7 @@ public final class SentBodyProto {
|
||||
/**
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
public java.lang.String getKey() {
|
||||
public String getKey() {
|
||||
return instance.getKey();
|
||||
}
|
||||
/**
|
||||
@ -365,7 +365,7 @@ public final class SentBodyProto {
|
||||
* <code>optional string key = 1;</code>
|
||||
*/
|
||||
public Builder setKey(
|
||||
java.lang.String value) {
|
||||
String value) {
|
||||
copyOnWrite();
|
||||
instance.setKey(value);
|
||||
return this;
|
||||
@ -420,8 +420,8 @@ public final class SentBodyProto {
|
||||
*/
|
||||
|
||||
public boolean containsData(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
return instance.getDataMap().containsKey(key);
|
||||
}
|
||||
|
||||
@ -435,8 +435,8 @@ public final class SentBodyProto {
|
||||
*/
|
||||
|
||||
public Builder removeData(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
copyOnWrite();
|
||||
instance.getMutableDataMap().remove(key);
|
||||
return this;
|
||||
@ -444,14 +444,14 @@ public final class SentBodyProto {
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getData() {
|
||||
@Deprecated
|
||||
public java.util.Map<String, String> getData() {
|
||||
return getDataMap();
|
||||
}
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
public java.util.Map<java.lang.String, java.lang.String> getDataMap() {
|
||||
public java.util.Map<String, String> getDataMap() {
|
||||
return java.util.Collections.unmodifiableMap(
|
||||
instance.getDataMap());
|
||||
}
|
||||
@ -459,11 +459,11 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrDefault(
|
||||
java.lang.String key,
|
||||
java.lang.String defaultValue) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrDefault(
|
||||
String key,
|
||||
String defaultValue) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
instance.getDataMap();
|
||||
return map.containsKey(key) ? map.get(key) : defaultValue;
|
||||
}
|
||||
@ -471,13 +471,13 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrThrow(
|
||||
java.lang.String key) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
java.util.Map<java.lang.String, java.lang.String> map =
|
||||
public String getDataOrThrow(
|
||||
String key) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
java.util.Map<String, String> map =
|
||||
instance.getDataMap();
|
||||
if (!map.containsKey(key)) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
@ -485,10 +485,10 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
public Builder putData(
|
||||
java.lang.String key,
|
||||
java.lang.String value) {
|
||||
if (key == null) { throw new java.lang.NullPointerException(); }
|
||||
if (value == null) { throw new java.lang.NullPointerException(); }
|
||||
String key,
|
||||
String value) {
|
||||
if (key == null) { throw new NullPointerException(); }
|
||||
if (value == null) { throw new NullPointerException(); }
|
||||
copyOnWrite();
|
||||
instance.getMutableDataMap().put(key, value);
|
||||
return this;
|
||||
@ -497,7 +497,7 @@ public final class SentBodyProto {
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
public Builder putAllData(
|
||||
java.util.Map<java.lang.String, java.lang.String> values) {
|
||||
java.util.Map<String, String> values) {
|
||||
copyOnWrite();
|
||||
instance.getMutableDataMap().putAll(values);
|
||||
return this;
|
||||
@ -506,11 +506,11 @@ public final class SentBodyProto {
|
||||
// @@protoc_insertion_point(builder_scope:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
}
|
||||
protected final Object dynamicMethod(
|
||||
com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
|
||||
MethodToInvoke method,
|
||||
Object arg0, Object arg1) {
|
||||
switch (method) {
|
||||
case NEW_MUTABLE_INSTANCE: {
|
||||
return new com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model();
|
||||
return new Model();
|
||||
}
|
||||
case IS_INITIALIZED: {
|
||||
return DEFAULT_INSTANCE;
|
||||
@ -524,14 +524,14 @@ public final class SentBodyProto {
|
||||
}
|
||||
case VISIT: {
|
||||
Visitor visitor = (Visitor) arg0;
|
||||
com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model other = (com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model) arg1;
|
||||
Model other = (Model) arg1;
|
||||
key_ = visitor.visitString(!key_.isEmpty(), key_,
|
||||
!other.key_.isEmpty(), other.key_);
|
||||
timestamp_ = visitor.visitLong(timestamp_ != 0L, timestamp_,
|
||||
other.timestamp_ != 0L, other.timestamp_);
|
||||
data_ = visitor.visitMap(
|
||||
data_, other.internalGetData());
|
||||
if (visitor == com.google.protobuf.GeneratedMessageLite.MergeFromVisitor
|
||||
if (visitor == MergeFromVisitor
|
||||
.INSTANCE) {
|
||||
bitField0_ |= other.bitField0_;
|
||||
}
|
||||
@ -588,7 +588,7 @@ public final class SentBodyProto {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
case GET_PARSER: {
|
||||
if (PARSER == null) { synchronized (com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model.class) {
|
||||
if (PARSER == null) { synchronized (Model.class) {
|
||||
if (PARSER == null) {
|
||||
PARSER = new DefaultInstanceBasedParser(DEFAULT_INSTANCE);
|
||||
}
|
||||
@ -602,13 +602,13 @@ public final class SentBodyProto {
|
||||
|
||||
|
||||
// @@protoc_insertion_point(class_scope:com.farsunset.cim.sdk.android.model.proto.Model)
|
||||
private static final com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model DEFAULT_INSTANCE;
|
||||
private static final Model DEFAULT_INSTANCE;
|
||||
static {
|
||||
DEFAULT_INSTANCE = new Model();
|
||||
DEFAULT_INSTANCE.makeImmutable();
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.android.model.proto.SentBodyProto.Model getDefaultInstance() {
|
||||
public static Model getDefaultInstance() {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="libs/slf4j-api-1.7.5.jar"/>
|
||||
<classpathentry kind="lib" path="libs/slf4j-nop-1.7.5.jar"/>
|
||||
<classpathentry kind="lib" path="libs/protobuf-java-3.7.0.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
2
cim-client-sdk/cim-java-sdk/.gitignore
vendored
Normal file
2
cim-client-sdk/cim-java-sdk/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target/
|
||||
.idea/
|
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>cim-java-sdk</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.genuitec.eclipse.ast.deploy.core.DeploymentBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>com.genuitec.eclipse.ast.deploy.core.deploymentnature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -1,3 +0,0 @@
|
||||
#Wed Oct 15 09:31:41 CST 2014
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
2
cim-client-sdk/cim-java-sdk/cim-java-sdk.iml
Normal file
2
cim-client-sdk/cim-java-sdk/cim-java-sdk.iml
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4" />
|
1
cim-client-sdk/cim-java-sdk/jar.bat
Normal file
1
cim-client-sdk/cim-java-sdk/jar.bat
Normal file
@ -0,0 +1 @@
|
||||
mvn clean package
|
1
cim-client-sdk/cim-java-sdk/jar.sh
Normal file
1
cim-client-sdk/cim-java-sdk/jar.sh
Normal file
@ -0,0 +1 @@
|
||||
mvn clean package
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
51
cim-client-sdk/cim-java-sdk/pom.xml
Normal file
51
cim-client-sdk/cim-java-sdk/pom.xml
Normal file
@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.farsunset</groupId>
|
||||
<artifactId>cim-java-sdk</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<protobuf.version>3.11.1</protobuf.version>
|
||||
<slf4j.version>1.7.30</slf4j.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.protobuf</groupId>
|
||||
<artifactId>protobuf-java</artifactId>
|
||||
<version>${protobuf.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${slf4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -1,115 +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.sdk.client.constant;
|
||||
|
||||
/**
|
||||
* 常量
|
||||
*/
|
||||
public interface CIMConstant {
|
||||
|
||||
long RECONN_INTERVAL_TIME = 30 * 1000;
|
||||
// 消息头长度为3个字节,第一个字节为消息类型,第二,第三字节 转换int后为消息长度
|
||||
int DATA_HEADER_LENGTH = 3;
|
||||
|
||||
public static interface ReturnCode {
|
||||
|
||||
String CODE_404 = "404";
|
||||
|
||||
String CODE_403 = "403";
|
||||
|
||||
String CODE_405 = "405";
|
||||
|
||||
String CODE_200 = "200";
|
||||
|
||||
String CODE_206 = "206";
|
||||
|
||||
String CODE_500 = "500";
|
||||
|
||||
}
|
||||
|
||||
public static interface ConfigKey {
|
||||
|
||||
public static String DEVICE_MODEL = "client.model";
|
||||
public static String CLIENT_VERSION = "client.version";
|
||||
public static String CLIENT_ACCOUNT = "client.account";
|
||||
public static String CLIENT_DEVICEID = "client.deviceid";
|
||||
|
||||
}
|
||||
|
||||
public static interface ProtobufType {
|
||||
byte C_H_RS = 0;
|
||||
byte S_H_RQ = 1;
|
||||
byte MESSAGE = 2;
|
||||
byte SENTBODY = 3;
|
||||
byte REPLYBODY = 4;
|
||||
}
|
||||
|
||||
public static interface RequestKey {
|
||||
|
||||
String CLIENT_BIND = "client_bind";
|
||||
|
||||
String CLIENT_LOGOUT = "client_logout";
|
||||
|
||||
@Deprecated
|
||||
String CLIENT_PULL_MESSAGE = "client_pull_message";
|
||||
|
||||
}
|
||||
|
||||
public static interface MessageAction {
|
||||
|
||||
// 被其他设备登录挤下线消息
|
||||
String ACTION_999 = "999";
|
||||
// 被系统禁用消息
|
||||
String ACTION_444 = "444";
|
||||
}
|
||||
|
||||
public static interface IntentAction {
|
||||
|
||||
// 消息广播action
|
||||
String ACTION_MESSAGE_RECEIVED = "com.farsunset.cim.MESSAGE_RECEIVED";
|
||||
|
||||
// 发送sendbody成功广播
|
||||
String ACTION_SENT_SUCCESSED = "com.farsunset.cim.SENT_SUCCESSED";
|
||||
|
||||
// 链接意外关闭广播
|
||||
String ACTION_CONNECTION_CLOSED = "com.farsunset.cim.CONNECTION_CLOSED";
|
||||
|
||||
// 链接失败广播
|
||||
String ACTION_CONNECTION_FAILED = "com.farsunset.cim.CONNECTION_FAILED";
|
||||
|
||||
// 链接成功广播
|
||||
String ACTION_CONNECTION_SUCCESSED = "com.farsunset.cim.CONNECTION_SUCCESSED";
|
||||
|
||||
// 发送sendbody成功后获得replaybody回应广播
|
||||
String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED";
|
||||
|
||||
// 网络变化广播
|
||||
String ACTION_NETWORK_CHANGED = "android.net.conn.CONNECTIVITY_CHANGE";
|
||||
|
||||
// 未知异常
|
||||
String ACTION_UNCAUGHT_EXCEPTION = "com.farsunset.cim.UNCAUGHT_EXCEPTION";
|
||||
|
||||
// 重试连接
|
||||
String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY";
|
||||
}
|
||||
|
||||
}
|
@ -1,35 +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.sdk.client.exception;
|
||||
|
||||
public class SessionClosedException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public SessionClosedException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public SessionClosedException(String s) {
|
||||
super(s);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,931 +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.sdk.model.proto;
|
||||
|
||||
public final class SentBodyProto {
|
||||
private SentBodyProto() {
|
||||
}
|
||||
|
||||
public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {
|
||||
}
|
||||
|
||||
public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
|
||||
registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
|
||||
}
|
||||
|
||||
public interface ModelOrBuilder extends
|
||||
// @@protoc_insertion_point(interface_extends:com.farsunset.cim.sdk.model.proto.Model)
|
||||
com.google.protobuf.MessageOrBuilder {
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
java.lang.String getKey();
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
com.google.protobuf.ByteString getKeyBytes();
|
||||
|
||||
/**
|
||||
* <code>int64 timestamp = 2;</code>
|
||||
*/
|
||||
long getTimestamp();
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
int getDataCount();
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
boolean containsData(java.lang.String key);
|
||||
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
java.util.Map<java.lang.String, java.lang.String> getData();
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
java.util.Map<java.lang.String, java.lang.String> getDataMap();
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
java.lang.String getDataOrDefault(java.lang.String key, java.lang.String defaultValue);
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
java.lang.String getDataOrThrow(java.lang.String key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Protobuf type {@code com.farsunset.cim.sdk.model.proto.Model}
|
||||
*/
|
||||
public static final class Model extends com.google.protobuf.GeneratedMessageV3 implements
|
||||
// @@protoc_insertion_point(message_implements:com.farsunset.cim.sdk.model.proto.Model)
|
||||
ModelOrBuilder {
|
||||
// Use Model.newBuilder() to construct.
|
||||
private Model(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
private Model() {
|
||||
key_ = "";
|
||||
timestamp_ = 0L;
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
|
||||
return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
|
||||
}
|
||||
|
||||
private Model(com.google.protobuf.CodedInputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
this();
|
||||
int mutable_bitField0_ = 0;
|
||||
try {
|
||||
boolean done = false;
|
||||
while (!done) {
|
||||
int tag = input.readTag();
|
||||
switch (tag) {
|
||||
case 0:
|
||||
done = true;
|
||||
break;
|
||||
default: {
|
||||
if (!input.skipField(tag)) {
|
||||
done = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 10: {
|
||||
java.lang.String s = input.readStringRequireUtf8();
|
||||
|
||||
key_ = s;
|
||||
break;
|
||||
}
|
||||
case 16: {
|
||||
|
||||
timestamp_ = input.readInt64();
|
||||
break;
|
||||
}
|
||||
case 26: {
|
||||
if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
|
||||
data_ = com.google.protobuf.MapField.newMapField(DataDefaultEntryHolder.defaultEntry);
|
||||
mutable_bitField0_ |= 0x00000004;
|
||||
}
|
||||
com.google.protobuf.MapEntry<java.lang.String, java.lang.String> data__ = input
|
||||
.readMessage(DataDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
|
||||
data_.getMutableMap().put(data__.getKey(), data__.getValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||
throw e.setUnfinishedMessage(this);
|
||||
} catch (java.io.IOException e) {
|
||||
throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
|
||||
} finally {
|
||||
makeExtensionsImmutable();
|
||||
}
|
||||
}
|
||||
|
||||
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
|
||||
return com.farsunset.cim.sdk.model.proto.SentBodyProto.internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor;
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
protected com.google.protobuf.MapField internalGetMapField(int number) {
|
||||
switch (number) {
|
||||
case 3:
|
||||
return internalGetData();
|
||||
default:
|
||||
throw new RuntimeException("Invalid map field number: " + number);
|
||||
}
|
||||
}
|
||||
|
||||
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
|
||||
return com.farsunset.cim.sdk.model.proto.SentBodyProto.internal_static_com_farsunset_cim_sdk_model_proto_Model_fieldAccessorTable
|
||||
.ensureFieldAccessorsInitialized(com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.class,
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.Builder.class);
|
||||
}
|
||||
|
||||
private int bitField0_;
|
||||
public static final int KEY_FIELD_NUMBER = 1;
|
||||
private volatile java.lang.Object key_;
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public java.lang.String getKey() {
|
||||
java.lang.Object ref = key_;
|
||||
if (ref instanceof java.lang.String) {
|
||||
return (java.lang.String) ref;
|
||||
} else {
|
||||
com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
|
||||
java.lang.String s = bs.toStringUtf8();
|
||||
key_ = s;
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public com.google.protobuf.ByteString getKeyBytes() {
|
||||
java.lang.Object ref = key_;
|
||||
if (ref instanceof java.lang.String) {
|
||||
com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
|
||||
key_ = b;
|
||||
return b;
|
||||
} else {
|
||||
return (com.google.protobuf.ByteString) ref;
|
||||
}
|
||||
}
|
||||
|
||||
public static final int TIMESTAMP_FIELD_NUMBER = 2;
|
||||
private long timestamp_;
|
||||
|
||||
/**
|
||||
* <code>int64 timestamp = 2;</code>
|
||||
*/
|
||||
public long getTimestamp() {
|
||||
return timestamp_;
|
||||
}
|
||||
|
||||
public static final int DATA_FIELD_NUMBER = 3;
|
||||
|
||||
private static final class DataDefaultEntryHolder {
|
||||
static final com.google.protobuf.MapEntry<java.lang.String, java.lang.String> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.String>newDefaultInstance(
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.internal_static_com_farsunset_cim_sdk_model_proto_Model_DataEntry_descriptor,
|
||||
com.google.protobuf.WireFormat.FieldType.STRING, "",
|
||||
com.google.protobuf.WireFormat.FieldType.STRING, "");
|
||||
}
|
||||
|
||||
private com.google.protobuf.MapField<java.lang.String, java.lang.String> data_;
|
||||
|
||||
private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetData() {
|
||||
if (data_ == null) {
|
||||
return com.google.protobuf.MapField.emptyMapField(DataDefaultEntryHolder.defaultEntry);
|
||||
}
|
||||
return data_;
|
||||
}
|
||||
|
||||
public int getDataCount() {
|
||||
return internalGetData().getMap().size();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public boolean containsData(java.lang.String key) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
return internalGetData().getMap().containsKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getData() {
|
||||
return getDataMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.util.Map<java.lang.String, java.lang.String> getDataMap() {
|
||||
return internalGetData().getMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrDefault(java.lang.String key, java.lang.String defaultValue) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
java.util.Map<java.lang.String, java.lang.String> map = internalGetData().getMap();
|
||||
return map.containsKey(key) ? map.get(key) : defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrThrow(java.lang.String key) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
java.util.Map<java.lang.String, java.lang.String> map = internalGetData().getMap();
|
||||
if (!map.containsKey(key)) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
|
||||
private byte memoizedIsInitialized = -1;
|
||||
|
||||
public final boolean isInitialized() {
|
||||
byte isInitialized = memoizedIsInitialized;
|
||||
if (isInitialized == 1)
|
||||
return true;
|
||||
if (isInitialized == 0)
|
||||
return false;
|
||||
|
||||
memoizedIsInitialized = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
|
||||
if (!getKeyBytes().isEmpty()) {
|
||||
com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
|
||||
}
|
||||
if (timestamp_ != 0L) {
|
||||
output.writeInt64(2, timestamp_);
|
||||
}
|
||||
com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetData(),
|
||||
DataDefaultEntryHolder.defaultEntry, 3);
|
||||
}
|
||||
|
||||
public int getSerializedSize() {
|
||||
int size = memoizedSize;
|
||||
if (size != -1)
|
||||
return size;
|
||||
|
||||
size = 0;
|
||||
if (!getKeyBytes().isEmpty()) {
|
||||
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
|
||||
}
|
||||
if (timestamp_ != 0L) {
|
||||
size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, timestamp_);
|
||||
}
|
||||
for (java.util.Map.Entry<java.lang.String, java.lang.String> entry : internalGetData().getMap()
|
||||
.entrySet()) {
|
||||
com.google.protobuf.MapEntry<java.lang.String, java.lang.String> data__ = DataDefaultEntryHolder.defaultEntry
|
||||
.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
|
||||
size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, data__);
|
||||
}
|
||||
memoizedSize = size;
|
||||
return size;
|
||||
}
|
||||
|
||||
private static final long serialVersionUID = 0L;
|
||||
|
||||
@java.lang.Override
|
||||
public boolean equals(final java.lang.Object obj) {
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof com.farsunset.cim.sdk.model.proto.SentBodyProto.Model)) {
|
||||
return super.equals(obj);
|
||||
}
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.Model other = (com.farsunset.cim.sdk.model.proto.SentBodyProto.Model) obj;
|
||||
|
||||
boolean result = true;
|
||||
result = result && getKey().equals(other.getKey());
|
||||
result = result && (getTimestamp() == other.getTimestamp());
|
||||
result = result && internalGetData().equals(other.internalGetData());
|
||||
return result;
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public int hashCode() {
|
||||
if (memoizedHashCode != 0) {
|
||||
return memoizedHashCode;
|
||||
}
|
||||
int hash = 41;
|
||||
hash = (19 * hash) + getDescriptor().hashCode();
|
||||
hash = (37 * hash) + KEY_FIELD_NUMBER;
|
||||
hash = (53 * hash) + getKey().hashCode();
|
||||
hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
|
||||
hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getTimestamp());
|
||||
if (!internalGetData().getMap().isEmpty()) {
|
||||
hash = (37 * hash) + DATA_FIELD_NUMBER;
|
||||
hash = (53 * hash) + internalGetData().hashCode();
|
||||
}
|
||||
hash = (29 * hash) + unknownFields.hashCode();
|
||||
memoizedHashCode = hash;
|
||||
return hash;
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(
|
||||
com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return PARSER.parseFrom(data);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(
|
||||
com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return PARSER.parseFrom(data, extensionRegistry);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(byte[] data)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return PARSER.parseFrom(data);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(byte[] data,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return PARSER.parseFrom(data, extensionRegistry);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(java.io.InputStream input)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(java.io.InputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseDelimitedFrom(
|
||||
java.io.InputStream input) throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseDelimitedFrom(
|
||||
java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input,
|
||||
extensionRegistry);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input) throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parseFrom(
|
||||
com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws java.io.IOException {
|
||||
return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
|
||||
}
|
||||
|
||||
public Builder newBuilderForType() {
|
||||
return newBuilder();
|
||||
}
|
||||
|
||||
public static Builder newBuilder() {
|
||||
return DEFAULT_INSTANCE.toBuilder();
|
||||
}
|
||||
|
||||
public static Builder newBuilder(com.farsunset.cim.sdk.model.proto.SentBodyProto.Model prototype) {
|
||||
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
|
||||
}
|
||||
|
||||
public Builder toBuilder() {
|
||||
return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
|
||||
Builder builder = new Builder(parent);
|
||||
return builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protobuf type {@code com.farsunset.cim.sdk.model.proto.Model}
|
||||
*/
|
||||
public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
|
||||
// @@protoc_insertion_point(builder_implements:com.farsunset.cim.sdk.model.proto.Model)
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.ModelOrBuilder {
|
||||
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
|
||||
return com.farsunset.cim.sdk.model.proto.SentBodyProto.internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor;
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
protected com.google.protobuf.MapField internalGetMapField(int number) {
|
||||
switch (number) {
|
||||
case 3:
|
||||
return internalGetData();
|
||||
default:
|
||||
throw new RuntimeException("Invalid map field number: " + number);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
protected com.google.protobuf.MapField internalGetMutableMapField(int number) {
|
||||
switch (number) {
|
||||
case 3:
|
||||
return internalGetMutableData();
|
||||
default:
|
||||
throw new RuntimeException("Invalid map field number: " + number);
|
||||
}
|
||||
}
|
||||
|
||||
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
|
||||
return com.farsunset.cim.sdk.model.proto.SentBodyProto.internal_static_com_farsunset_cim_sdk_model_proto_Model_fieldAccessorTable
|
||||
.ensureFieldAccessorsInitialized(com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.class,
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.Builder.class);
|
||||
}
|
||||
|
||||
// Construct using
|
||||
// com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.newBuilder()
|
||||
private Builder() {
|
||||
maybeForceBuilderInitialization();
|
||||
}
|
||||
|
||||
private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
|
||||
super(parent);
|
||||
maybeForceBuilderInitialization();
|
||||
}
|
||||
|
||||
private void maybeForceBuilderInitialization() {
|
||||
if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
|
||||
}
|
||||
}
|
||||
|
||||
public Builder clear() {
|
||||
super.clear();
|
||||
key_ = "";
|
||||
|
||||
timestamp_ = 0L;
|
||||
|
||||
internalGetMutableData().clear();
|
||||
return this;
|
||||
}
|
||||
|
||||
public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
|
||||
return com.farsunset.cim.sdk.model.proto.SentBodyProto.internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor;
|
||||
}
|
||||
|
||||
public com.farsunset.cim.sdk.model.proto.SentBodyProto.Model getDefaultInstanceForType() {
|
||||
return com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.getDefaultInstance();
|
||||
}
|
||||
|
||||
public com.farsunset.cim.sdk.model.proto.SentBodyProto.Model build() {
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.Model result = buildPartial();
|
||||
if (!result.isInitialized()) {
|
||||
throw newUninitializedMessageException(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public com.farsunset.cim.sdk.model.proto.SentBodyProto.Model buildPartial() {
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.Model result = new com.farsunset.cim.sdk.model.proto.SentBodyProto.Model(
|
||||
this);
|
||||
int from_bitField0_ = bitField0_;
|
||||
int to_bitField0_ = 0;
|
||||
result.key_ = key_;
|
||||
result.timestamp_ = timestamp_;
|
||||
result.data_ = internalGetData();
|
||||
result.data_.makeImmutable();
|
||||
result.bitField0_ = to_bitField0_;
|
||||
onBuilt();
|
||||
return result;
|
||||
}
|
||||
|
||||
public Builder clone() {
|
||||
return (Builder) super.clone();
|
||||
}
|
||||
|
||||
public Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, Object value) {
|
||||
return (Builder) super.setField(field, value);
|
||||
}
|
||||
|
||||
public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
|
||||
return (Builder) super.clearField(field);
|
||||
}
|
||||
|
||||
public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
|
||||
return (Builder) super.clearOneof(oneof);
|
||||
}
|
||||
|
||||
public Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index,
|
||||
Object value) {
|
||||
return (Builder) super.setRepeatedField(field, index, value);
|
||||
}
|
||||
|
||||
public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, Object value) {
|
||||
return (Builder) super.addRepeatedField(field, value);
|
||||
}
|
||||
|
||||
public Builder mergeFrom(com.google.protobuf.Message other) {
|
||||
if (other instanceof com.farsunset.cim.sdk.model.proto.SentBodyProto.Model) {
|
||||
return mergeFrom((com.farsunset.cim.sdk.model.proto.SentBodyProto.Model) other);
|
||||
} else {
|
||||
super.mergeFrom(other);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public Builder mergeFrom(com.farsunset.cim.sdk.model.proto.SentBodyProto.Model other) {
|
||||
if (other == com.farsunset.cim.sdk.model.proto.SentBodyProto.Model.getDefaultInstance())
|
||||
return this;
|
||||
if (!other.getKey().isEmpty()) {
|
||||
key_ = other.key_;
|
||||
onChanged();
|
||||
}
|
||||
if (other.getTimestamp() != 0L) {
|
||||
setTimestamp(other.getTimestamp());
|
||||
}
|
||||
internalGetMutableData().mergeFrom(other.internalGetData());
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
|
||||
public final boolean isInitialized() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Builder mergeFrom(com.google.protobuf.CodedInputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
|
||||
com.farsunset.cim.sdk.model.proto.SentBodyProto.Model parsedMessage = null;
|
||||
try {
|
||||
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
|
||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||
parsedMessage = (com.farsunset.cim.sdk.model.proto.SentBodyProto.Model) e.getUnfinishedMessage();
|
||||
throw e.unwrapIOException();
|
||||
} finally {
|
||||
if (parsedMessage != null) {
|
||||
mergeFrom(parsedMessage);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private int bitField0_;
|
||||
|
||||
private java.lang.Object key_ = "";
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public java.lang.String getKey() {
|
||||
java.lang.Object ref = key_;
|
||||
if (!(ref instanceof java.lang.String)) {
|
||||
com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
|
||||
java.lang.String s = bs.toStringUtf8();
|
||||
key_ = s;
|
||||
return s;
|
||||
} else {
|
||||
return (java.lang.String) ref;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public com.google.protobuf.ByteString getKeyBytes() {
|
||||
java.lang.Object ref = key_;
|
||||
if (ref instanceof String) {
|
||||
com.google.protobuf.ByteString b = com.google.protobuf.ByteString
|
||||
.copyFromUtf8((java.lang.String) ref);
|
||||
key_ = b;
|
||||
return b;
|
||||
} else {
|
||||
return (com.google.protobuf.ByteString) ref;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public Builder setKey(java.lang.String value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
||||
key_ = value;
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public Builder clearKey() {
|
||||
|
||||
key_ = getDefaultInstance().getKey();
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>string key = 1;</code>
|
||||
*/
|
||||
public Builder setKeyBytes(com.google.protobuf.ByteString value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
checkByteStringIsUtf8(value);
|
||||
|
||||
key_ = value;
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
|
||||
private long timestamp_;
|
||||
|
||||
/**
|
||||
* <code>int64 timestamp = 2;</code>
|
||||
*/
|
||||
public long getTimestamp() {
|
||||
return timestamp_;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>int64 timestamp = 2;</code>
|
||||
*/
|
||||
public Builder setTimestamp(long value) {
|
||||
|
||||
timestamp_ = value;
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>int64 timestamp = 2;</code>
|
||||
*/
|
||||
public Builder clearTimestamp() {
|
||||
|
||||
timestamp_ = 0L;
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
|
||||
private com.google.protobuf.MapField<java.lang.String, java.lang.String> data_;
|
||||
|
||||
private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetData() {
|
||||
if (data_ == null) {
|
||||
return com.google.protobuf.MapField.emptyMapField(DataDefaultEntryHolder.defaultEntry);
|
||||
}
|
||||
return data_;
|
||||
}
|
||||
|
||||
private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetMutableData() {
|
||||
onChanged();
|
||||
;
|
||||
if (data_ == null) {
|
||||
data_ = com.google.protobuf.MapField.newMapField(DataDefaultEntryHolder.defaultEntry);
|
||||
}
|
||||
if (!data_.isMutable()) {
|
||||
data_ = data_.copy();
|
||||
}
|
||||
return data_;
|
||||
}
|
||||
|
||||
public int getDataCount() {
|
||||
return internalGetData().getMap().size();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public boolean containsData(java.lang.String key) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
return internalGetData().getMap().containsKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use {@link #getDataMap()} instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getData() {
|
||||
return getDataMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.util.Map<java.lang.String, java.lang.String> getDataMap() {
|
||||
return internalGetData().getMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrDefault(java.lang.String key, java.lang.String defaultValue) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
java.util.Map<java.lang.String, java.lang.String> map = internalGetData().getMap();
|
||||
return map.containsKey(key) ? map.get(key) : defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public java.lang.String getDataOrThrow(java.lang.String key) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
java.util.Map<java.lang.String, java.lang.String> map = internalGetData().getMap();
|
||||
if (!map.containsKey(key)) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
|
||||
public Builder clearData() {
|
||||
internalGetMutableData().getMutableMap().clear();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public Builder removeData(java.lang.String key) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
internalGetMutableData().getMutableMap().remove(key);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use alternate mutation accessors instead.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public java.util.Map<java.lang.String, java.lang.String> getMutableData() {
|
||||
return internalGetMutableData().getMutableMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
public Builder putData(java.lang.String key, java.lang.String value) {
|
||||
if (key == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
if (value == null) {
|
||||
throw new java.lang.NullPointerException();
|
||||
}
|
||||
internalGetMutableData().getMutableMap().put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>map<string, string> data = 3;</code>
|
||||
*/
|
||||
|
||||
public Builder putAllData(java.util.Map<java.lang.String, java.lang.String> values) {
|
||||
internalGetMutableData().getMutableMap().putAll(values);
|
||||
return this;
|
||||
}
|
||||
|
||||
public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
|
||||
return this;
|
||||
}
|
||||
|
||||
public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
|
||||
return this;
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(builder_scope:com.farsunset.cim.sdk.model.proto.Model)
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(class_scope:com.farsunset.cim.sdk.model.proto.Model)
|
||||
private static final com.farsunset.cim.sdk.model.proto.SentBodyProto.Model DEFAULT_INSTANCE;
|
||||
static {
|
||||
DEFAULT_INSTANCE = new com.farsunset.cim.sdk.model.proto.SentBodyProto.Model();
|
||||
}
|
||||
|
||||
public static com.farsunset.cim.sdk.model.proto.SentBodyProto.Model getDefaultInstance() {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
||||
private static final com.google.protobuf.Parser<Model> PARSER = new com.google.protobuf.AbstractParser<Model>() {
|
||||
public Model parsePartialFrom(com.google.protobuf.CodedInputStream input,
|
||||
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||
return new Model(input, extensionRegistry);
|
||||
}
|
||||
};
|
||||
|
||||
public static com.google.protobuf.Parser<Model> parser() {
|
||||
return PARSER;
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public com.google.protobuf.Parser<Model> getParserForType() {
|
||||
return PARSER;
|
||||
}
|
||||
|
||||
public com.farsunset.cim.sdk.model.proto.SentBodyProto.Model getDefaultInstanceForType() {
|
||||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static final com.google.protobuf.Descriptors.Descriptor internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor;
|
||||
private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_com_farsunset_cim_sdk_model_proto_Model_fieldAccessorTable;
|
||||
private static final com.google.protobuf.Descriptors.Descriptor internal_static_com_farsunset_cim_sdk_model_proto_Model_DataEntry_descriptor;
|
||||
private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_com_farsunset_cim_sdk_model_proto_Model_DataEntry_fieldAccessorTable;
|
||||
|
||||
public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
|
||||
static {
|
||||
java.lang.String[] descriptorData = { "\n\016SentBody.proto\022!com.farsunset.cim.sdk."
|
||||
+ "model.proto\"\226\001\n\005Model\022\013\n\003key\030\001 \001(\t\022\021\n\tti"
|
||||
+ "mestamp\030\002 \001(\003\022@\n\004data\030\003 \003(\01322.com.farsun"
|
||||
+ "set.cim.sdk.model.proto.Model.DataEntry\032"
|
||||
+ "+\n\tDataEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t"
|
||||
+ ":\0028\001B\017B\rSentBodyProtob\006proto3" };
|
||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||
public com.google.protobuf.ExtensionRegistry assignDescriptors(
|
||||
com.google.protobuf.Descriptors.FileDescriptor root) {
|
||||
descriptor = root;
|
||||
return null;
|
||||
}
|
||||
};
|
||||
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData,
|
||||
new com.google.protobuf.Descriptors.FileDescriptor[] {}, assigner);
|
||||
internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor = getDescriptor().getMessageTypes().get(0);
|
||||
internal_static_com_farsunset_cim_sdk_model_proto_Model_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
|
||||
internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor,
|
||||
new java.lang.String[] { "Key", "Timestamp", "Data", });
|
||||
internal_static_com_farsunset_cim_sdk_model_proto_Model_DataEntry_descriptor = internal_static_com_farsunset_cim_sdk_model_proto_Model_descriptor
|
||||
.getNestedTypes().get(0);
|
||||
internal_static_com_farsunset_cim_sdk_model_proto_Model_DataEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
|
||||
internal_static_com_farsunset_cim_sdk_model_proto_Model_DataEntry_descriptor,
|
||||
new java.lang.String[] { "Key", "Value", });
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(outer_class_scope)
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -31,9 +31,9 @@ class CIMCacheManager {
|
||||
|
||||
public static final String KEY_CIM_DESTROYED = "KEY_CIM_DESTROYED";
|
||||
|
||||
public static final String KEY_CIM_SERVIER_HOST = "KEY_CIM_SERVIER_HOST";
|
||||
public static final String KEY_CIM_SERVER_HOST = "KEY_CIM_SERVER_HOST";
|
||||
|
||||
public static final String KEY_CIM_SERVIER_PORT = "KEY_CIM_SERVIER_PORT";
|
||||
public static final String KEY_CIM_SERVER_PORT = "KEY_CIM_SERVER_PORT";
|
||||
|
||||
public static final String KEY_CIM_CONNECTION_STATE = "KEY_CIM_CONNECTION_STATE";
|
||||
|
||||
@ -65,7 +65,7 @@ class CIMCacheManager {
|
||||
|
||||
public boolean getBoolean(String key) {
|
||||
String value = getString(key);
|
||||
return value == null ? false : Boolean.parseBoolean(value);
|
||||
return Boolean.parseBoolean(value);
|
||||
}
|
||||
|
||||
public void putInt(String key, int value) {
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -31,7 +31,6 @@ import java.util.Random;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Semaphore;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
||||
import com.farsunset.cim.sdk.client.coder.CIMLogger;
|
||||
import com.farsunset.cim.sdk.client.coder.ClientMessageDecoder;
|
||||
@ -65,24 +64,9 @@ class CIMConnectorManager {
|
||||
|
||||
private ByteBuffer readBuffer = ByteBuffer.allocate(READ_BUFFER_SIZE);
|
||||
|
||||
private ExecutorService workerExecutor = Executors.newFixedThreadPool(1,new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r,"worker-");
|
||||
}
|
||||
});
|
||||
private ExecutorService bossExecutor = Executors.newFixedThreadPool(1,new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r,"boss-");
|
||||
}
|
||||
});
|
||||
private ExecutorService eventExecutor = Executors.newFixedThreadPool(1,new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r,"event-");
|
||||
}
|
||||
});
|
||||
private ExecutorService workerExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r,"worker-"));
|
||||
private ExecutorService bossExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r,"boss-"));
|
||||
private ExecutorService eventExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r,"event-"));
|
||||
|
||||
private Semaphore semaphore = new Semaphore(1, true);
|
||||
|
||||
@ -109,62 +93,56 @@ class CIMConnectorManager {
|
||||
return;
|
||||
}
|
||||
|
||||
bossExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
bossExecutor.execute(() -> {
|
||||
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
LOGGER.startConnect(host, port);
|
||||
|
||||
CIMCacheManager.getInstance().putBoolean(CIMCacheManager.KEY_CIM_CONNECTION_STATE, false);
|
||||
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
socketChannel = SocketChannel.open();
|
||||
socketChannel.configureBlocking(true);
|
||||
socketChannel.socket().setTcpNoDelay(true);
|
||||
socketChannel.socket().setKeepAlive(true);
|
||||
socketChannel.socket().setReceiveBufferSize(READ_BUFFER_SIZE);
|
||||
socketChannel.socket().setSendBufferSize(WRITE_BUFFER_SIZE);
|
||||
|
||||
socketChannel.socket().connect(new InetSocketAddress(host, port),CONNECT_TIME_OUT);
|
||||
|
||||
semaphore.release();
|
||||
|
||||
handelConnectedEvent();
|
||||
|
||||
|
||||
int result = -1;
|
||||
|
||||
while((result = socketChannel.read(readBuffer)) > 0) {
|
||||
|
||||
if(readBuffer.position() == readBuffer.capacity()) {
|
||||
extendByteBuffer();
|
||||
}
|
||||
|
||||
handelSocketReadEvent(result);
|
||||
|
||||
LOGGER.startConnect(host, port);
|
||||
|
||||
CIMCacheManager.getInstance().putBoolean(CIMCacheManager.KEY_CIM_CONNECTION_STATE, false);
|
||||
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
socketChannel = SocketChannel.open();
|
||||
socketChannel.configureBlocking(true);
|
||||
socketChannel.socket().setTcpNoDelay(true);
|
||||
socketChannel.socket().setKeepAlive(true);
|
||||
socketChannel.socket().setReceiveBufferSize(READ_BUFFER_SIZE);
|
||||
socketChannel.socket().setSendBufferSize(WRITE_BUFFER_SIZE);
|
||||
|
||||
socketChannel.socket().connect(new InetSocketAddress(host, port),CONNECT_TIME_OUT);
|
||||
|
||||
semaphore.release();
|
||||
|
||||
handelConnectedEvent();
|
||||
|
||||
|
||||
int result = -1;
|
||||
|
||||
while((result = socketChannel.read(readBuffer)) > 0) {
|
||||
|
||||
if(readBuffer.position() == readBuffer.capacity()) {
|
||||
extendByteBuffer();
|
||||
}
|
||||
|
||||
|
||||
handelSocketReadEvent(result);
|
||||
|
||||
}catch(ConnectException ignore){
|
||||
semaphore.release();
|
||||
handleConnectAbortedEvent();
|
||||
}catch(SocketTimeoutException ignore){
|
||||
semaphore.release();
|
||||
handleConnectAbortedEvent();
|
||||
}catch(IOException ignore) {
|
||||
semaphore.release();
|
||||
handelDisconnectedEvent();
|
||||
}catch (InterruptedException ignore) {
|
||||
semaphore.release();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
handelSocketReadEvent(result);
|
||||
|
||||
}catch(ConnectException | SocketTimeoutException ignore){
|
||||
semaphore.release();
|
||||
handleConnectAbortedEvent();
|
||||
} catch(IOException ignore) {
|
||||
semaphore.release();
|
||||
handelDisconnectedEvent();
|
||||
}catch (InterruptedException ignore) {
|
||||
semaphore.release();
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -177,23 +155,23 @@ class CIMConnectorManager {
|
||||
|
||||
private void handleConnectAbortedEvent() {
|
||||
|
||||
long interval = CIMConstant.RECONN_INTERVAL_TIME - (5 * 1000 - new Random().nextInt(15 * 1000));
|
||||
long interval = CIMConstant.RECONNECT_INTERVAL_TIME - (5 * 1000 - new Random().nextInt(15 * 1000));
|
||||
|
||||
LOGGER.connectFailure(interval);
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FAILED);
|
||||
intent.putExtra("interval", interval);
|
||||
sendBroadcast(intent);
|
||||
|
||||
}
|
||||
|
||||
private void handelConnectedEvent() throws IOException {
|
||||
private void handelConnectedEvent() {
|
||||
|
||||
sessionCreated();
|
||||
}
|
||||
|
||||
private void handelSocketReadEvent(int result) throws IOException {
|
||||
private void handelSocketReadEvent(int result) {
|
||||
|
||||
if(result == -1) {
|
||||
closeSession();
|
||||
@ -239,32 +217,28 @@ class CIMConnectorManager {
|
||||
return;
|
||||
}
|
||||
|
||||
workerExecutor.execute(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
int result = 0;
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
ByteBuffer buffer = messageEncoder.encode(body);
|
||||
while(buffer.hasRemaining()){
|
||||
result += socketChannel.write(buffer);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
result = -1;
|
||||
}finally {
|
||||
|
||||
semaphore.release();
|
||||
|
||||
if(result <= 0) {
|
||||
closeSession();
|
||||
}else {
|
||||
messageSent(body);
|
||||
}
|
||||
}
|
||||
workerExecutor.execute(() -> {
|
||||
int result = 0;
|
||||
try {
|
||||
|
||||
semaphore.acquire();
|
||||
|
||||
ByteBuffer buffer = messageEncoder.encode(body);
|
||||
while(buffer.hasRemaining()){
|
||||
result += socketChannel.write(buffer);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
result = -1;
|
||||
}finally {
|
||||
|
||||
semaphore.release();
|
||||
|
||||
if(result <= 0) {
|
||||
closeSession();
|
||||
}else {
|
||||
messageSent(body);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -275,7 +249,7 @@ class CIMConnectorManager {
|
||||
LOGGER.sessionCreated(socketChannel);
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FINISHED);
|
||||
sendBroadcast(intent);
|
||||
|
||||
}
|
||||
@ -296,34 +270,34 @@ class CIMConnectorManager {
|
||||
|
||||
}
|
||||
|
||||
public void messageReceived(Object obj) {
|
||||
public void messageReceived(Object data) {
|
||||
|
||||
if (obj instanceof Message) {
|
||||
if (data instanceof Message) {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED);
|
||||
intent.putExtra(Message.class.getName(), (Message) obj);
|
||||
intent.putExtra(Message.class.getName(), data);
|
||||
sendBroadcast(intent);
|
||||
|
||||
}
|
||||
if (obj instanceof ReplyBody) {
|
||||
if (data instanceof ReplyBody) {
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED);
|
||||
intent.putExtra(ReplyBody.class.getName(), (ReplyBody) obj);
|
||||
intent.putExtra(ReplyBody.class.getName(), data);
|
||||
sendBroadcast(intent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void messageSent(Object message) {
|
||||
public void messageSent(Object data) {
|
||||
|
||||
LOGGER.messageSent(socketChannel, message);
|
||||
LOGGER.messageSent(socketChannel, data);
|
||||
|
||||
if (message instanceof SentBody) {
|
||||
if (data instanceof SentBody) {
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED);
|
||||
intent.putExtra(SentBody.class.getName(), (SentBody) message);
|
||||
intent.setAction(CIMConstant.IntentAction.ACTION_SEND_FINISHED);
|
||||
intent.putExtra(SentBody.class.getName(), data);
|
||||
sendBroadcast(intent);
|
||||
}
|
||||
}
|
||||
@ -360,12 +334,7 @@ class CIMConnectorManager {
|
||||
|
||||
|
||||
private void sendBroadcast(final Intent intent) {
|
||||
eventExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
CIMEventBroadcastReceiver.getInstance().onReceive(intent);
|
||||
}
|
||||
});
|
||||
eventExecutor.execute(() -> CIMEventBroadcastReceiver.getInstance().onReceive(intent));
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -21,9 +21,9 @@
|
||||
*/
|
||||
package com.farsunset.cim.sdk.client;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.farsunset.cim.sdk.client.constant.CIMConstant;
|
||||
import com.farsunset.cim.sdk.client.model.Intent;
|
||||
@ -35,16 +35,23 @@ import com.farsunset.cim.sdk.client.model.SentBody;
|
||||
* 消息入口,所有消息都会经过这里
|
||||
*/
|
||||
public class CIMEventBroadcastReceiver {
|
||||
Random random = new Random();
|
||||
private static CIMEventBroadcastReceiver recerver;
|
||||
private static CIMEventBroadcastReceiver receiver;
|
||||
private CIMEventListener listener;
|
||||
private Timer connectionHandler = new Timer();;
|
||||
|
||||
private ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, r -> {
|
||||
Thread thread = new Thread(r);
|
||||
thread.setName("cim-reconnect-");
|
||||
return thread;
|
||||
});
|
||||
|
||||
private CIMEventBroadcastReceiver(){
|
||||
|
||||
}
|
||||
public static CIMEventBroadcastReceiver getInstance() {
|
||||
if (recerver == null) {
|
||||
recerver = new CIMEventBroadcastReceiver();
|
||||
if (receiver == null) {
|
||||
receiver = new CIMEventBroadcastReceiver();
|
||||
}
|
||||
return recerver;
|
||||
return receiver;
|
||||
}
|
||||
|
||||
public void setGlobalCIMEventListener(CIMEventListener ls) {
|
||||
@ -63,16 +70,16 @@ public class CIMEventBroadcastReceiver {
|
||||
/*
|
||||
* cim连接服务器失败事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED)) {
|
||||
long interval = intent.getLongExtra("interval", CIMConstant.RECONN_INTERVAL_TIME);
|
||||
onInnerConnectionFailed(interval);
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECT_FAILED)) {
|
||||
long interval = intent.getLongExtra("interval", CIMConstant.RECONNECT_INTERVAL_TIME);
|
||||
onInnerConnectFailed(interval);
|
||||
}
|
||||
|
||||
/*
|
||||
* cim连接服务器成功事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED)) {
|
||||
onInnerConnectionSuccessed();
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_CONNECT_FINISHED)) {
|
||||
onInnerConnectFinished();
|
||||
}
|
||||
|
||||
/*
|
||||
@ -83,24 +90,17 @@ public class CIMEventBroadcastReceiver {
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取收到replybody成功事件
|
||||
* 获取收到replyBody成功事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED)) {
|
||||
listener.onReplyReceived((ReplyBody) intent.getExtra(ReplyBody.class.getName()));
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取sendbody发送成功事件
|
||||
* 获取sendBody发送成功事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED)) {
|
||||
onSentSucceed((SentBody) intent.getExtra(SentBody.class.getName()));
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取cim数据传输异常事件
|
||||
*/
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_UNCAUGHT_EXCEPTION)) {
|
||||
onUncaughtException((Exception) intent.getExtra(Exception.class.getName()));
|
||||
if (intent.getAction().equals(CIMConstant.IntentAction.ACTION_SEND_FINISHED)) {
|
||||
onInnerSendFinished((SentBody) intent.getExtra(SentBody.class.getName()));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -120,25 +120,23 @@ public class CIMEventBroadcastReceiver {
|
||||
|
||||
}
|
||||
|
||||
private void onInnerConnectionFailed(long interval) {
|
||||
private void onInnerConnectFailed(long interval) {
|
||||
|
||||
connectionHandler.schedule(new ConnectionTask(), interval);
|
||||
executorService.schedule((Runnable) CIMPushManager::connect,interval, TimeUnit.MICROSECONDS);
|
||||
|
||||
listener.onConnectionFailed();
|
||||
listener.onConnectFailed();
|
||||
}
|
||||
|
||||
private void onInnerConnectionSuccessed() {
|
||||
private void onInnerConnectFinished() {
|
||||
CIMCacheManager.getInstance().putBoolean(CIMCacheManager.KEY_CIM_CONNECTION_STATE, true);
|
||||
|
||||
boolean autoBind = CIMPushManager.autoBindDeviceId();
|
||||
|
||||
listener.onConnectionSuccessed(autoBind);
|
||||
listener.onConnectFinished(autoBind);
|
||||
}
|
||||
|
||||
private void onUncaughtException(Throwable arg0) {
|
||||
}
|
||||
|
||||
private void onInnerMessageReceived(com.farsunset.cim.sdk.client.model.Message message) {
|
||||
private void onInnerMessageReceived(Message message) {
|
||||
if (isForceOfflineMessage(message.getAction())) {
|
||||
CIMPushManager.stop();
|
||||
}
|
||||
@ -149,16 +147,9 @@ public class CIMEventBroadcastReceiver {
|
||||
private boolean isForceOfflineMessage(String action) {
|
||||
return CIMConstant.MessageAction.ACTION_999.equals(action);
|
||||
}
|
||||
|
||||
|
||||
private void onSentSucceed(SentBody body) {
|
||||
}
|
||||
|
||||
class ConnectionTask extends TimerTask {
|
||||
|
||||
public void run() {
|
||||
CIMPushManager.connect();
|
||||
}
|
||||
private void onInnerSendFinished(SentBody body) {
|
||||
listener.onSendFinished(body);
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -23,6 +23,7 @@ package com.farsunset.cim.sdk.client;
|
||||
|
||||
import com.farsunset.cim.sdk.client.model.Message;
|
||||
import com.farsunset.cim.sdk.client.model.ReplyBody;
|
||||
import com.farsunset.cim.sdk.client.model.SentBody;
|
||||
|
||||
/**
|
||||
* CIM 主要事件接口
|
||||
@ -39,9 +40,15 @@ public interface CIMEventListener {
|
||||
/**
|
||||
* 当调用CIMPushManager.sendRequest()向服务端发送请求,获得相应时调用
|
||||
*
|
||||
* @param replybody
|
||||
* @param body
|
||||
*/
|
||||
void onReplyReceived(ReplyBody replybody);
|
||||
void onReplyReceived(ReplyBody body);
|
||||
|
||||
/**
|
||||
* 当调用CIMPushManager.sendRequest()向服务端发送请求成功
|
||||
* @param body
|
||||
*/
|
||||
void onSendFinished(SentBody body);
|
||||
|
||||
/**
|
||||
* 当连接服务器成功时回调
|
||||
@ -49,7 +56,7 @@ public interface CIMEventListener {
|
||||
* @param hasAutoBind
|
||||
* : true 已经自动绑定账号到服务器了,不需要再手动调用bindAccount
|
||||
*/
|
||||
void onConnectionSuccessed(boolean hasAutoBind);
|
||||
void onConnectFinished(boolean hasAutoBind);
|
||||
|
||||
/**
|
||||
* 当断开服务器连接的时候回调
|
||||
@ -60,10 +67,11 @@ public interface CIMEventListener {
|
||||
* 当服务器连接失败的时候回调
|
||||
*
|
||||
*/
|
||||
void onConnectionFailed();
|
||||
void onConnectFailed();
|
||||
|
||||
/**
|
||||
* 监听器在容器里面的排序。值越大则越先接收
|
||||
* @return 值越大优先级越高
|
||||
*/
|
||||
int getEventDispatchOrder();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -58,7 +58,7 @@ public class CIMListenerManager {
|
||||
|
||||
public static void notifyOnConnectionSuccessed(boolean antoBind) {
|
||||
for (CIMEventListener listener : cimListeners) {
|
||||
listener.onConnectionSuccessed(antoBind);
|
||||
listener.onConnectFinished(antoBind);
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ public class CIMListenerManager {
|
||||
|
||||
public static void notifyOnConnectionFailed() {
|
||||
for (CIMEventListener listener : cimListeners) {
|
||||
listener.onConnectionFailed();
|
||||
listener.onConnectFailed();
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -41,21 +41,26 @@ public class CIMPushManager {
|
||||
|
||||
static String ACTION_CLOSE_CIM_CONNECTION = "ACTION_CLOSE_CIM_CONNECTION";
|
||||
|
||||
static String ACTION_DESTORY = "ACTION_DESTORY";
|
||||
static String ACTION_DESTROY = "ACTION_DESTROY";
|
||||
|
||||
static String KEY_CIM_CONNECTION_STATUS = "KEY_CIM_CONNECTION_STATUS";
|
||||
|
||||
// 被销毁的destroy()
|
||||
/**
|
||||
* 销毁的
|
||||
*/
|
||||
public static final int STATE_DESTROYED = 0x0000DE;
|
||||
// 被销停止的 stop()
|
||||
public static final int STATE_STOPED = 0x0000EE;
|
||||
/**
|
||||
* 停止推送
|
||||
*/
|
||||
public static final int STATE_STOPPED = 0x0000EE;
|
||||
|
||||
/**
|
||||
* 正常
|
||||
*/
|
||||
public static final int STATE_NORMAL = 0x000000;
|
||||
|
||||
/**
|
||||
* 初始化,连接服务端,在程序启动页或者 在Application里调用
|
||||
*
|
||||
* @param context
|
||||
* @param ip
|
||||
* @param port
|
||||
*/
|
||||
@ -65,12 +70,12 @@ public class CIMPushManager {
|
||||
CIMCacheManager.getInstance().putBoolean(CIMCacheManager.KEY_CIM_DESTROYED, false);
|
||||
CIMCacheManager.getInstance().putBoolean(CIMCacheManager.KEY_MANUAL_STOP, false);
|
||||
|
||||
CIMCacheManager.getInstance().putString(CIMCacheManager.KEY_CIM_SERVIER_HOST, ip);
|
||||
CIMCacheManager.getInstance().putInt(CIMCacheManager.KEY_CIM_SERVIER_PORT, port);
|
||||
CIMCacheManager.getInstance().putString(CIMCacheManager.KEY_CIM_SERVER_HOST, ip);
|
||||
CIMCacheManager.getInstance().putInt(CIMCacheManager.KEY_CIM_SERVER_PORT, port);
|
||||
|
||||
Intent serviceIntent = new Intent();
|
||||
serviceIntent.putExtra(CIMCacheManager.KEY_CIM_SERVIER_HOST, ip);
|
||||
serviceIntent.putExtra(CIMCacheManager.KEY_CIM_SERVIER_PORT, port);
|
||||
serviceIntent.putExtra(CIMCacheManager.KEY_CIM_SERVER_HOST, ip);
|
||||
serviceIntent.putExtra(CIMCacheManager.KEY_CIM_SERVER_PORT, port);
|
||||
serviceIntent.setAction(ACTION_CREATE_CIM_CONNECTION);
|
||||
startService(serviceIntent);
|
||||
|
||||
@ -83,14 +88,14 @@ public class CIMPushManager {
|
||||
protected static void connect() {
|
||||
|
||||
boolean isManualStop = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_MANUAL_STOP);
|
||||
boolean isManualDestory = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
boolean isManualDestroy = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
|
||||
if (isManualStop || isManualDestory) {
|
||||
if (isManualStop || isManualDestroy) {
|
||||
return;
|
||||
}
|
||||
|
||||
String host = CIMCacheManager.getInstance().getString(CIMCacheManager.KEY_CIM_SERVIER_HOST);
|
||||
int port = CIMCacheManager.getInstance().getInt(CIMCacheManager.KEY_CIM_SERVIER_PORT);
|
||||
String host = CIMCacheManager.getInstance().getString(CIMCacheManager.KEY_CIM_SERVER_HOST);
|
||||
int port = CIMCacheManager.getInstance().getInt(CIMCacheManager.KEY_CIM_SERVER_PORT);
|
||||
|
||||
connect(host, port);
|
||||
|
||||
@ -106,7 +111,7 @@ public class CIMPushManager {
|
||||
sent.put("deviceId", getDeviceId());
|
||||
sent.put("channel", "java");
|
||||
sent.put("device", sysPro.getProperty("os.name"));
|
||||
sent.put("version", getClientVersion());
|
||||
sent.put("appVersion", getClientVersion());
|
||||
sent.put("osVersion", sysPro.getProperty("os.version"));
|
||||
sendRequest(sent);
|
||||
}
|
||||
@ -119,8 +124,8 @@ public class CIMPushManager {
|
||||
*/
|
||||
public static void bindAccount(String account) {
|
||||
|
||||
boolean isManualDestory = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestory || account == null || account.trim().length() == 0) {
|
||||
boolean isManualDestroy = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestroy || account == null || account.trim().length() == 0) {
|
||||
return;
|
||||
}
|
||||
sendBindRequest(account);
|
||||
@ -145,15 +150,14 @@ public class CIMPushManager {
|
||||
/**
|
||||
* 发送一个CIM请求
|
||||
*
|
||||
* @param context
|
||||
* @body
|
||||
*/
|
||||
public static void sendRequest(SentBody body) {
|
||||
|
||||
boolean isManualStop = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_MANUAL_STOP);
|
||||
boolean isManualDestory = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
boolean isManualDestroy = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
|
||||
if (isManualStop || isManualDestory) {
|
||||
if (isManualStop || isManualDestroy) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -167,12 +171,11 @@ public class CIMPushManager {
|
||||
/**
|
||||
* 停止接受推送,将会退出当前账号登录,端口与服务端的连接
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void stop() {
|
||||
|
||||
boolean isManualDestory = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestory) {
|
||||
boolean isManualDestroy = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestroy) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -184,29 +187,24 @@ public class CIMPushManager {
|
||||
|
||||
/**
|
||||
* 完全销毁CIM,一般用于完全退出程序,调用resume将不能恢复
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void destroy() {
|
||||
|
||||
CIMCacheManager.getInstance().putBoolean(CIMCacheManager.KEY_CIM_DESTROYED, true);
|
||||
|
||||
Intent serviceIntent = new Intent();
|
||||
serviceIntent.setAction(ACTION_DESTORY);
|
||||
serviceIntent.setAction(ACTION_DESTROY);
|
||||
startService(serviceIntent);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新恢复接收推送,重新连接服务端,并登录当前账号如果aotuBind == true
|
||||
*
|
||||
* @param context
|
||||
* @param aotuBind
|
||||
*/
|
||||
public static void resume() {
|
||||
|
||||
boolean isManualDestory = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestory) {
|
||||
boolean isManualDestroy = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestroy) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -218,14 +216,14 @@ public class CIMPushManager {
|
||||
}
|
||||
|
||||
public static int getState() {
|
||||
boolean isManualDestory = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestory) {
|
||||
boolean isManualDestroy = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_CIM_DESTROYED);
|
||||
if (isManualDestroy) {
|
||||
return STATE_DESTROYED;
|
||||
}
|
||||
|
||||
boolean isManualStop = CIMCacheManager.getInstance().getBoolean(CIMCacheManager.KEY_MANUAL_STOP);
|
||||
if (isManualStop) {
|
||||
return STATE_STOPED;
|
||||
return STATE_STOPPED;
|
||||
}
|
||||
|
||||
return STATE_NORMAL;
|
||||
@ -250,12 +248,12 @@ public class CIMPushManager {
|
||||
|
||||
private static String getDeviceId() {
|
||||
|
||||
String deviceId = System.getProperties().getProperty(CIMConstant.ConfigKey.CLIENT_DEVICEID);
|
||||
|
||||
if(deviceId == null) {
|
||||
deviceId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
|
||||
System.getProperties().put(CIMConstant.ConfigKey.CLIENT_DEVICEID, deviceId);
|
||||
String currDeviceId = System.getProperties().getProperty(CIMConstant.ConfigKey.CLIENT_DEVICE_ID);
|
||||
if(currDeviceId != null) {
|
||||
return currDeviceId;
|
||||
}
|
||||
String deviceId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
|
||||
System.getProperties().put(CIMConstant.ConfigKey.CLIENT_DEVICE_ID, deviceId);
|
||||
return deviceId;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -26,11 +26,9 @@ import com.farsunset.cim.sdk.client.model.SentBody;
|
||||
|
||||
/**
|
||||
* 与服务端连接服务
|
||||
*
|
||||
*/
|
||||
public class CIMPushService {
|
||||
|
||||
protected final static int DEF_CIM_PORT = 23456;
|
||||
private CIMConnectorManager manager;
|
||||
|
||||
private static CIMPushService service;
|
||||
@ -48,13 +46,11 @@ public class CIMPushService {
|
||||
|
||||
public void onStartCommand(Intent intent) {
|
||||
|
||||
intent = (intent == null ? new Intent(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE) : intent);
|
||||
|
||||
String action = intent.getAction();
|
||||
String action = intent == null ? CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE : intent.getAction();
|
||||
|
||||
if (CIMPushManager.ACTION_CREATE_CIM_CONNECTION.equals(action)) {
|
||||
String host = CIMCacheManager.getInstance().getString(CIMCacheManager.KEY_CIM_SERVIER_HOST);
|
||||
int port = CIMCacheManager.getInstance().getInt(CIMCacheManager.KEY_CIM_SERVIER_PORT);
|
||||
String host = CIMCacheManager.getInstance().getString(CIMCacheManager.KEY_CIM_SERVER_HOST);
|
||||
int port = CIMCacheManager.getInstance().getInt(CIMCacheManager.KEY_CIM_SERVER_PORT);
|
||||
manager.connect(host, port);
|
||||
}
|
||||
|
||||
@ -66,14 +62,14 @@ public class CIMPushService {
|
||||
manager.closeSession();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_DESTORY.equals(action)) {
|
||||
if (CIMPushManager.ACTION_DESTROY.equals(action)) {
|
||||
manager.destroy();
|
||||
}
|
||||
|
||||
if (CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE.equals(action) && !manager.isConnected()) {
|
||||
|
||||
String host = CIMCacheManager.getInstance().getString(CIMCacheManager.KEY_CIM_SERVIER_HOST);
|
||||
int port = CIMCacheManager.getInstance().getInt(CIMCacheManager.KEY_CIM_SERVIER_PORT);
|
||||
String host = CIMCacheManager.getInstance().getString(CIMCacheManager.KEY_CIM_SERVER_HOST);
|
||||
int port = CIMCacheManager.getInstance().getInt(CIMCacheManager.KEY_CIM_SERVER_PORT);
|
||||
manager.connect(host, port);
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -80,7 +80,7 @@ public class CIMLogger {
|
||||
}
|
||||
|
||||
public void connectState(boolean isConnected,boolean isManualStop,boolean isDestroyed) {
|
||||
LOGGER.debug("CONNECTED:" + isConnected + " STOPED:"+isManualStop+ " DESTROYED:"+isDestroyed);
|
||||
LOGGER.debug("CONNECTED:" + isConnected + " STOPPED:"+isManualStop+ " DESTROYED:"+isDestroyed);
|
||||
}
|
||||
|
||||
private String getSessionInfo(SocketChannel session) {
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -40,7 +40,7 @@ public class ClientMessageDecoder {
|
||||
|
||||
public Object doDecode(ByteBuffer iobuffer) {
|
||||
|
||||
/**
|
||||
/*
|
||||
* 消息头3位
|
||||
*/
|
||||
if (iobuffer.remaining() < CIMConstant.DATA_HEADER_LENGTH) {
|
||||
@ -49,26 +49,26 @@ public class ClientMessageDecoder {
|
||||
|
||||
iobuffer.mark();
|
||||
|
||||
byte conetnType = iobuffer.get();
|
||||
byte type = iobuffer.get();
|
||||
|
||||
byte lv = iobuffer.get();// int 低位
|
||||
byte hv = iobuffer.get();// int 高位
|
||||
byte lv = iobuffer.get();
|
||||
byte hv = iobuffer.get();
|
||||
|
||||
int conetnLength = getContentLength(lv, hv);
|
||||
int length = getContentLength(lv, hv);
|
||||
|
||||
// 如果消息体没有接收完整,则重置读取,等待下一次重新读取
|
||||
if (conetnLength > iobuffer.remaining()) {
|
||||
if (length > iobuffer.remaining()) {
|
||||
iobuffer.reset();
|
||||
return null;
|
||||
}
|
||||
|
||||
byte[] dataBytes = new byte[conetnLength];
|
||||
iobuffer.get(dataBytes, 0, conetnLength);
|
||||
byte[] dataBytes = new byte[length];
|
||||
iobuffer.get(dataBytes, 0, length);
|
||||
|
||||
iobuffer.position(0);
|
||||
|
||||
try {
|
||||
return mappingMessageObject(dataBytes, conetnType);
|
||||
return mappingMessageObject(dataBytes, type);
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
@ -79,11 +79,10 @@ public class ClientMessageDecoder {
|
||||
private Object mappingMessageObject(byte[] bytes, byte type) throws InvalidProtocolBufferException {
|
||||
|
||||
if (CIMConstant.ProtobufType.S_H_RQ == type) {
|
||||
HeartbeatRequest request = HeartbeatRequest.getInstance();
|
||||
return request;
|
||||
return HeartbeatRequest.getInstance();
|
||||
}
|
||||
|
||||
if (CIMConstant.ProtobufType.REPLYBODY == type) {
|
||||
if (CIMConstant.ProtobufType.REPLY_BODY == type) {
|
||||
ReplyBodyProto.Model bodyProto = ReplyBodyProto.Model.parseFrom(bytes);
|
||||
ReplyBody body = new ReplyBody();
|
||||
body.setKey(bodyProto.getKey());
|
||||
@ -116,14 +115,12 @@ public class ClientMessageDecoder {
|
||||
/**
|
||||
* 解析消息体长度
|
||||
*
|
||||
* @param type
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
private int getContentLength(byte lv, byte hv) {
|
||||
int l = (lv & 0xff);
|
||||
int h = (hv & 0xff);
|
||||
return (l | (h <<= 8));
|
||||
return (l | h << 8);
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -37,13 +37,13 @@ public class ClientMessageEncoder {
|
||||
Protobufable data = (Protobufable) object;
|
||||
byte[] byteArray = data.getByteArray();
|
||||
|
||||
ByteBuffer iobuffer = ByteBuffer.allocate(byteArray.length + CIMConstant.DATA_HEADER_LENGTH);
|
||||
ByteBuffer ioBuffer = ByteBuffer.allocate(byteArray.length + CIMConstant.DATA_HEADER_LENGTH);
|
||||
|
||||
iobuffer.put(createHeader(data.getType(), byteArray.length));
|
||||
iobuffer.put(byteArray);
|
||||
iobuffer.flip();
|
||||
ioBuffer.put(createHeader(data.getType(), byteArray.length));
|
||||
ioBuffer.put(byteArray);
|
||||
ioBuffer.flip();
|
||||
|
||||
return iobuffer;
|
||||
return ioBuffer;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,119 @@
|
||||
/*
|
||||
* 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.sdk.client.constant;
|
||||
|
||||
/**
|
||||
* 常量
|
||||
*/
|
||||
public interface CIMConstant {
|
||||
|
||||
long RECONNECT_INTERVAL_TIME = 30 * 1000;
|
||||
/**
|
||||
* 消息头长度为3个字节,第一个字节为消息类型,第二,第三字节 转换int后为消息长度
|
||||
*/
|
||||
int DATA_HEADER_LENGTH = 3;
|
||||
|
||||
interface ReturnCode {
|
||||
|
||||
String CODE_404 = "404";
|
||||
|
||||
String CODE_403 = "403";
|
||||
|
||||
String CODE_405 = "405";
|
||||
|
||||
String CODE_200 = "200";
|
||||
|
||||
String CODE_206 = "206";
|
||||
|
||||
String CODE_500 = "500";
|
||||
|
||||
}
|
||||
|
||||
interface ConfigKey {
|
||||
|
||||
String DEVICE_MODEL = "client.model";
|
||||
String CLIENT_VERSION = "client.version";
|
||||
String CLIENT_ACCOUNT = "client.account";
|
||||
String CLIENT_DEVICE_ID = "client.deviceId";
|
||||
|
||||
}
|
||||
|
||||
interface ProtobufType {
|
||||
byte C_H_RS = 0;
|
||||
byte S_H_RQ = 1;
|
||||
byte MESSAGE = 2;
|
||||
byte SENT_BODY = 3;
|
||||
byte REPLY_BODY = 4;
|
||||
}
|
||||
|
||||
interface RequestKey {
|
||||
|
||||
String CLIENT_BIND = "client_bind";
|
||||
|
||||
}
|
||||
|
||||
interface MessageAction {
|
||||
/*
|
||||
被其他设备登录挤下线消息
|
||||
*/
|
||||
String ACTION_999 = "999";
|
||||
}
|
||||
|
||||
interface IntentAction {
|
||||
|
||||
/*
|
||||
消息广播action
|
||||
*/
|
||||
String ACTION_MESSAGE_RECEIVED = "com.farsunset.cim.ACTION_MESSAGE_RECEIVED";
|
||||
|
||||
/*
|
||||
发送sendBody成功广播
|
||||
*/
|
||||
String ACTION_SEND_FINISHED = "com.farsunset.cim.ACTION_SEND_FINISHED";
|
||||
|
||||
/*
|
||||
链接意外关闭广播
|
||||
*/
|
||||
String ACTION_CONNECTION_CLOSED = "com.farsunset.cim.ACTION_CONNECTION_CLOSED";
|
||||
|
||||
/*
|
||||
链接失败广播
|
||||
*/
|
||||
String ACTION_CONNECT_FAILED = "com.farsunset.cim.ACTION_CONNECT_FAILED";
|
||||
|
||||
/*
|
||||
链接成功广播
|
||||
*/
|
||||
String ACTION_CONNECT_FINISHED = "com.farsunset.cim.ACTION_CONNECT_FINISHED";
|
||||
|
||||
/*
|
||||
发送sendBody成功后获得replyBody回应广播
|
||||
*/
|
||||
String ACTION_REPLY_RECEIVED = "com.farsunset.cim.ACTION_REPLY_RECEIVED";
|
||||
|
||||
/*
|
||||
重试连接
|
||||
*/
|
||||
String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY";
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -50,6 +50,7 @@ public class HeartbeatRequest implements Serializable, Protobufable {
|
||||
return CMD_HEARTBEAT_RESPONSE.getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return TAG;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -49,6 +49,7 @@ public class HeartbeatResponse implements Serializable, Protobufable {
|
||||
return CMD_HEARTBEAT_RESPONSE.getBytes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return TAG;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -151,6 +151,7 @@ public class Message implements Serializable {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuffer buffer = new StringBuffer();
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -57,7 +57,7 @@ public class ReplyBody implements Serializable {
|
||||
private long timestamp;
|
||||
|
||||
public ReplyBody() {
|
||||
data = new HashMap<String, String>();
|
||||
data = new HashMap<>();
|
||||
timestamp = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
@ -115,20 +115,18 @@ public class ReplyBody implements Serializable {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("#ReplyBody#").append("\n");
|
||||
buffer.append("key:").append(this.getKey()).append("\n");
|
||||
buffer.append("timestamp:").append(timestamp).append("\n");
|
||||
buffer.append("code:").append(code).append("\n");
|
||||
|
||||
if (!data.isEmpty()) {
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
|
||||
return buffer.toString();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*
|
||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -39,7 +39,7 @@ public class SentBody implements Serializable, Protobufable {
|
||||
|
||||
private String key;
|
||||
|
||||
private HashMap<String, String> data = new HashMap<String, String>();;
|
||||
private HashMap<String, String> data = new HashMap<>();;
|
||||
|
||||
private long timestamp;
|
||||
|
||||
@ -89,16 +89,13 @@ public class SentBody implements Serializable, Protobufable {
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("#SentBody#").append("\n");
|
||||
;
|
||||
buffer.append("key:").append(key).append("\n");
|
||||
buffer.append("timestamp:").append(timestamp).append("\n");
|
||||
if (!data.isEmpty()) {
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
buffer.append("data{").append("\n");
|
||||
for (String key : getKeySet()) {
|
||||
buffer.append(key).append(":").append(this.get(key)).append("\n");
|
||||
}
|
||||
buffer.append("}");
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@ -115,7 +112,7 @@ public class SentBody implements Serializable, Protobufable {
|
||||
|
||||
@Override
|
||||
public byte getType() {
|
||||
return CIMConstant.ProtobufType.SENTBODY;
|
||||
return CIMConstant.ProtobufType.SENT_BODY;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,216 +1,181 @@
|
||||
/*CIM服务器IP*/
|
||||
var CIM_HOST = "127.0.0.1";
|
||||
/*CIM服务端口*/
|
||||
var CIM_PORT = 23456;
|
||||
var CIM_URI="ws://"+CIM_HOST+":"+CIM_PORT;
|
||||
const CIM_HOST = "127.0.0.1";
|
||||
/*
|
||||
*服务端 websocket端口
|
||||
*/
|
||||
const CIM_PORT = 34567;
|
||||
const CIM_URI = "ws://" + CIM_HOST + ":" + CIM_PORT;
|
||||
|
||||
var CMD_HEARTBEAT_RESPONSE = new Uint8Array([67,82]);
|
||||
var SDK_VERSION = "1.0.0";
|
||||
var SDK_CHANNEL = "browser";
|
||||
var APP_PACKAGE = "com.farsunset.cim";
|
||||
var ACTION_999 = "999";//特殊的消息类型,代表被服务端强制下线
|
||||
var DATA_HEADER_LENGTH = 3;
|
||||
const APP_VERSION = "1.0.0";
|
||||
const APP_CHANNEL = "browser";
|
||||
const APP_PACKAGE = "com.farsunset.cim";
|
||||
|
||||
var C_H_RS = 0;
|
||||
var S_H_RQ = 1;
|
||||
var MESSAGE = 2;
|
||||
var SENTBODY = 3;
|
||||
var REPLYBODY = 4;
|
||||
/*
|
||||
*特殊的消息类型,代表被服务端强制下线
|
||||
*/
|
||||
const ACTION_999 = "999";
|
||||
const DATA_HEADER_LENGTH = 1;
|
||||
|
||||
var socket;
|
||||
var manualStop = false;
|
||||
var CIMPushManager = {};
|
||||
CIMPushManager.connection = function(){
|
||||
manualStop = false;
|
||||
window.localStorage.account = '';
|
||||
socket = new WebSocket(CIM_URI);
|
||||
socket.cookieEnabled = false;
|
||||
socket.binaryType = 'arraybuffer';
|
||||
socket.onopen = CIMPushManager.innerOnConnectionSuccessed;
|
||||
socket.onmessage = CIMPushManager.innerOnMessageReceived;
|
||||
const MESSAGE = 2;
|
||||
const REPLY_BODY = 4;
|
||||
|
||||
let socket;
|
||||
let manualStop = false;
|
||||
const CIMPushManager = {};
|
||||
CIMPushManager.connect = function () {
|
||||
manualStop = false;
|
||||
window.localStorage.account = '';
|
||||
socket = new WebSocket(CIM_URI);
|
||||
socket.cookieEnabled = false;
|
||||
socket.binaryType = 'arraybuffer';
|
||||
socket.onopen = CIMPushManager.innerOnConnectFinished;
|
||||
socket.onmessage = CIMPushManager.innerOnMessageReceived;
|
||||
socket.onclose = CIMPushManager.innerOnConnectionClosed;
|
||||
};
|
||||
|
||||
CIMPushManager.bindAccount = function(account){
|
||||
|
||||
window.localStorage.account = account;
|
||||
|
||||
var deviceId = window.localStorage.deviceIddeviceId;
|
||||
if(deviceId == '' || deviceId == undefined){
|
||||
deviceId = generateUUID();
|
||||
window.localStorage.deviceId = deviceId;
|
||||
}
|
||||
CIMPushManager.bindAccount = function (account) {
|
||||
|
||||
var browser = getBrowser();
|
||||
var body = new proto.com.farsunset.cim.sdk.web.model.SentBody();
|
||||
body.setKey("client_bind");
|
||||
body.getDataMap().set("account",account);
|
||||
body.getDataMap().set("channel",SDK_CHANNEL);
|
||||
body.getDataMap().set("version",SDK_VERSION);
|
||||
body.getDataMap().set("osVersion", browser.version);
|
||||
body.getDataMap().set("packageName", APP_PACKAGE);
|
||||
body.getDataMap().set("deviceId", deviceId);
|
||||
body.getDataMap().set("device", browser.name);
|
||||
CIMPushManager.sendRequest(body);
|
||||
window.localStorage.account = account;
|
||||
|
||||
let deviceId = window.localStorage.deviceIddeviceId;
|
||||
if (deviceId == '' || deviceId == undefined) {
|
||||
deviceId = generateUUID();
|
||||
window.localStorage.deviceId = deviceId;
|
||||
}
|
||||
|
||||
let browser = getBrowser();
|
||||
let body = new proto.com.farsunset.cim.sdk.web.model.SentBody();
|
||||
body.setKey("client_bind");
|
||||
body.setTimestamp(new Date().getTime());
|
||||
body.getDataMap().set("account", account);
|
||||
body.getDataMap().set("channel", APP_CHANNEL);
|
||||
body.getDataMap().set("appVersion", APP_VERSION);
|
||||
body.getDataMap().set("osVersion", browser.version);
|
||||
body.getDataMap().set("packageName", APP_PACKAGE);
|
||||
body.getDataMap().set("deviceId", deviceId);
|
||||
body.getDataMap().set("device", browser.name);
|
||||
CIMPushManager.sendRequest(body);
|
||||
};
|
||||
|
||||
CIMPushManager.stop = function(){
|
||||
manualStop = true;
|
||||
socket.close();
|
||||
CIMPushManager.stop = function () {
|
||||
manualStop = true;
|
||||
socket.close();
|
||||
};
|
||||
|
||||
CIMPushManager.resume = function(){
|
||||
CIMPushManager.resume = function () {
|
||||
manualStop = false;
|
||||
CIMPushManager.connection();
|
||||
CIMPushManager.connect();
|
||||
};
|
||||
|
||||
|
||||
CIMPushManager.innerOnConnectionSuccessed = function(){
|
||||
var account = window.localStorage.account;
|
||||
if(account == '' || account == undefined){
|
||||
onConnectionSuccessed();
|
||||
}else{
|
||||
CIMPushManager.bindAccount(account);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
CIMPushManager.innerOnMessageReceived = function(e){
|
||||
var data = new Uint8Array(e.data);
|
||||
|
||||
var type = data[0];
|
||||
|
||||
/**
|
||||
* 收到服务端发来的心跳请求,立即回复响应,否则服务端会在10秒后断开连接
|
||||
*/
|
||||
if(type == S_H_RQ){
|
||||
CIMPushManager.sendHeartbeatResponse();
|
||||
return;
|
||||
}
|
||||
|
||||
if(type == MESSAGE){
|
||||
var length = getContentLength(data[1],data[2]);
|
||||
var data = proto.com.farsunset.cim.sdk.web.model.Message.deserializeBinary(data.subarray(DATA_HEADER_LENGTH,DATA_HEADER_LENGTH+length));
|
||||
onInterceptMessageReceived(data.toObject(false));
|
||||
return;
|
||||
}
|
||||
|
||||
if(type == REPLYBODY){
|
||||
var length = getContentLength(data[1],data[2]);
|
||||
var data = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(data.subarray(DATA_HEADER_LENGTH,DATA_HEADER_LENGTH+length));
|
||||
/**
|
||||
* 将proto对象转换成json对象,去除无用信息
|
||||
*/
|
||||
var reply = {};
|
||||
reply.code = data.getCode();
|
||||
reply.key = data.getKey();
|
||||
reply.message = data.getMessage();
|
||||
reply.timestamp = data.getTimestamp();
|
||||
reply.data = {};
|
||||
|
||||
/**
|
||||
* 注意,遍历map这里的参数 value在前key在后
|
||||
*/
|
||||
data.getDataMap().forEach(function (v,k){
|
||||
reply.data[k] = v;
|
||||
});
|
||||
|
||||
onReplyReceived(reply);
|
||||
}
|
||||
CIMPushManager.innerOnConnectFinished = function () {
|
||||
let account = window.localStorage.account;
|
||||
if (account === '' || account === undefined) {
|
||||
onConnectFinished();
|
||||
} else {
|
||||
CIMPushManager.bindAccount(account);
|
||||
}
|
||||
};
|
||||
|
||||
CIMPushManager.innerOnConnectionClosed = function(e){
|
||||
if(!manualStop){
|
||||
var time = Math.floor(Math.random()*(30-15+1)+15);
|
||||
setTimeout(function(){
|
||||
CIMPushManager.connection();
|
||||
},time);
|
||||
}
|
||||
|
||||
CIMPushManager.innerOnMessageReceived = function (e) {
|
||||
let data = new Uint8Array(e.data);
|
||||
let type = data[0];
|
||||
let body = data.subarray(DATA_HEADER_LENGTH, data.length);
|
||||
|
||||
if (type == MESSAGE) {
|
||||
let message = proto.com.farsunset.cim.sdk.web.model.Message.deserializeBinary(body);
|
||||
onInterceptMessageReceived(message.toObject(false));
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == REPLY_BODY) {
|
||||
let message = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(body);
|
||||
/**
|
||||
* 将proto对象转换成json对象,去除无用信息
|
||||
*/
|
||||
let reply = {};
|
||||
reply.code = message.getCode();
|
||||
reply.key = message.getKey();
|
||||
reply.message = message.getMessage();
|
||||
reply.timestamp = message.getTimestamp();
|
||||
reply.data = {};
|
||||
|
||||
/**
|
||||
* 注意,遍历map这里的参数 value在前key在后
|
||||
*/
|
||||
message.getDataMap().forEach(function (v, k) {
|
||||
reply.data[k] = v;
|
||||
});
|
||||
|
||||
onReplyReceived(reply);
|
||||
}
|
||||
};
|
||||
|
||||
CIMPushManager.sendRequest = function(body){
|
||||
|
||||
var data = body.serializeBinary();
|
||||
var header = buildHeader(SENTBODY,data.length);
|
||||
var protubuf = new Uint8Array(data.length + header.length);
|
||||
protubuf.set(header,0);
|
||||
protubuf.set(data,header.length);
|
||||
socket.send(protubuf);
|
||||
CIMPushManager.innerOnConnectionClosed = function (e) {
|
||||
if (!manualStop) {
|
||||
let time = Math.floor(Math.random() * (30 - 15 + 1) + 15);
|
||||
setTimeout(function () {
|
||||
CIMPushManager.connect();
|
||||
}, time);
|
||||
}
|
||||
};
|
||||
|
||||
CIMPushManager.sendHeartbeatResponse = function(){
|
||||
var data = CMD_HEARTBEAT_RESPONSE;
|
||||
var header = buildHeader(C_H_RS,data.length);
|
||||
var protubuf = new Uint8Array(data.length + header.length);
|
||||
protubuf.set(header,0);
|
||||
protubuf.set(data,header.length);
|
||||
socket.send(protubuf);
|
||||
CIMPushManager.sendRequest = function (body) {
|
||||
let data = body.serializeBinary();
|
||||
let protobuf = new Uint8Array(data.length);
|
||||
protobuf.set(data, 0);
|
||||
socket.send(protobuf);
|
||||
};
|
||||
|
||||
function getContentLength( lv, hv) {
|
||||
var l = (lv & 0xff);
|
||||
var h = (hv & 0xff);
|
||||
return (l | (h <<= 8));
|
||||
}
|
||||
|
||||
function buildHeader(type,length){
|
||||
var header = new Uint8Array(DATA_HEADER_LENGTH);
|
||||
header[0] = type;
|
||||
header[1] = (length & 0xff);
|
||||
header[2] = ((length >> 8) & 0xff);
|
||||
return header;
|
||||
|
||||
}
|
||||
function onInterceptMessageReceived(message){
|
||||
//被强制下线之后,不再继续连接服务端
|
||||
if(message.action == ACTION_999){
|
||||
manualStop = true;
|
||||
}
|
||||
//收到消息后,将消息发送给页面
|
||||
if(onMessageReceived instanceof Function){
|
||||
onMessageReceived(message);
|
||||
}
|
||||
function onInterceptMessageReceived(message) {
|
||||
/*
|
||||
*被强制下线之后,不再继续连接服务端
|
||||
*/
|
||||
if (message.action == ACTION_999) {
|
||||
manualStop = true;
|
||||
}
|
||||
/*
|
||||
*收到消息后,将消息发送给页面
|
||||
*/
|
||||
if (onMessageReceived instanceof Function) {
|
||||
onMessageReceived(message);
|
||||
}
|
||||
}
|
||||
|
||||
function getBrowser() {
|
||||
var explorer = window.navigator.userAgent.toLowerCase() ;
|
||||
// ie
|
||||
if (explorer.indexOf("msie") >= 0) {
|
||||
var ver=explorer.match(/msie ([\d.]+)/)[1];
|
||||
return {name:"IE",version:ver};
|
||||
}
|
||||
// firefox
|
||||
else if (explorer.indexOf("firefox") >= 0) {
|
||||
var ver=explorer.match(/firefox\/([\d.]+)/)[1];
|
||||
return {name:"Firefox",version:ver};
|
||||
}
|
||||
// Chrome
|
||||
else if(explorer.indexOf("chrome") >= 0){
|
||||
var ver=explorer.match(/chrome\/([\d.]+)/)[1];
|
||||
return {name:"Chrome",version:ver};
|
||||
}
|
||||
// Opera
|
||||
else if(explorer.indexOf("opera") >= 0){
|
||||
var ver=explorer.match(/opera.([\d.]+)/)[1];
|
||||
return {name:"Opera",version:ver};
|
||||
}
|
||||
// Safari
|
||||
else if(explorer.indexOf("Safari") >= 0){
|
||||
var ver=explorer.match(/version\/([\d.]+)/)[1];
|
||||
return {name:"Safari",version:ver};
|
||||
}
|
||||
|
||||
return {name:"Other",version:"1.0.0"};
|
||||
let explorer = window.navigator.userAgent.toLowerCase();
|
||||
if (explorer.indexOf("msie") >= 0) {
|
||||
let ver = explorer.match(/msie ([\d.]+)/)[1];
|
||||
return {name: "IE", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("firefox") >= 0) {
|
||||
let ver = explorer.match(/firefox\/([\d.]+)/)[1];
|
||||
return {name: "Firefox", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("chrome") >= 0) {
|
||||
let ver = explorer.match(/chrome\/([\d.]+)/)[1];
|
||||
return {name: "Chrome", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("opera") >= 0) {
|
||||
let ver = explorer.match(/opera.([\d.]+)/)[1];
|
||||
return {name: "Opera", version: ver};
|
||||
}
|
||||
else if (explorer.indexOf("Safari") >= 0) {
|
||||
let ver = explorer.match(/version\/([\d.]+)/)[1];
|
||||
return {name: "Safari", version: ver};
|
||||
}
|
||||
|
||||
return {name: "Other", version: "1.0.0"};
|
||||
}
|
||||
|
||||
function generateUUID() {
|
||||
var d = new Date().getTime();
|
||||
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = (d + Math.random()*16)%16 | 0;
|
||||
d = Math.floor(d/16);
|
||||
return (c=='x' ? r : (r&0x3|0x8)).toString(16);
|
||||
});
|
||||
return uuid.replace(/-/g,'');
|
||||
let d = new Date().getTime();
|
||||
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
let r = (d + Math.random() * 16) % 16 | 0;
|
||||
d = Math.floor(d / 16);
|
||||
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
|
||||
});
|
||||
return uuid.replace(/-/g, '');
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="lib" path="libs/slf4j-api-1.7.25.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="owner.project.facets" value="java"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="libs/protobuf-java-3.9.1.jar"/>
|
||||
<classpathentry kind="lib" path="libs/mina-core-2.1.3.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
2
cim-server-sdk/cim-server-sdk-mina/.gitignore
vendored
Normal file
2
cim-server-sdk/cim-server-sdk-mina/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target/
|
||||
.idea/
|
@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>cim-server-sdk-mina</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user