Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
05728887
Commit
05728887
authored
Apr 08, 2022
by
罗长华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、增加im-sdk模块
parent
89a22df1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
375 additions
and
0 deletions
+375
-0
im-sdk/pom.xml
+63
-0
im-sdk/src/main/java/com/wecloud/im/common/HttpClient.java
+311
-0
pom.xml
+1
-0
No files found.
im-sdk/pom.xml
0 → 100644
View file @
05728887
<?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"
>
<groupId>
com.wecloud
</groupId>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
im-sdk
</artifactId>
<version>
1.0
</version>
<description>
蔚可云IM SDK
</description>
<properties>
<maven.compiler.source>
8
</maven.compiler.source>
<maven.compiler.target>
8
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
<version>
3.14.7
</version>
</dependency>
<dependency>
<groupId>
com.squareup.okio
</groupId>
<artifactId>
okio
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
1.2.67
</version>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
1.18.16
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-source-plugin
</artifactId>
<version>
3.0.0
</version>
<!-- 绑定source插件到Maven的生命周期,并在生命周期后执行绑定的source的goal -->
<executions>
<execution>
<!-- 绑定source插件到Maven的生命周期 -->
<phase>
compile
</phase>
<!--在生命周期后执行绑定的source插件的goals -->
<goals>
<goal>
jar-no-fork
</goal>
</goals>
</execution>
</executions>
</plugin>
</project>
im-sdk/src/main/java/com/wecloud/im/common/HttpClient.java
0 → 100644
View file @
05728887
package
com
.
wecloud
.
im
.
common
;
import
okhttp3.Call
;
import
okhttp3.Callback
;
import
okhttp3.FormBody
;
import
okhttp3.MediaType
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.RequestBody
;
import
okhttp3.Response
;
import
java.io.IOException
;
import
java.net.URLEncoder
;
import
java.security.SecureRandom
;
import
java.security.cert.X509Certificate
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.concurrent.Semaphore
;
import
java.util.concurrent.TimeUnit
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.SSLSocketFactory
;
import
javax.net.ssl.TrustManager
;
import
javax.net.ssl.X509TrustManager
;
import
com.alibaba.fastjson.JSON
;
/**
*
* @Author luozh
* @Date 2022年04月08日 18:20
* @Version 1.0
*/
public
class
HttpClient
{
private
static
volatile
OkHttpClient
okHttpClient
=
null
;
private
static
volatile
Semaphore
semaphore
=
null
;
private
Map
<
String
,
String
>
headerMap
;
private
Map
<
String
,
String
>
paramMap
;
private
String
url
;
private
Request
.
Builder
request
;
/**
* 初始化okHttpClient,并且允许https访问
*/
private
HttpClient
()
{
if
(
okHttpClient
==
null
)
{
synchronized
(
HttpClient
.
class
)
{
if
(
okHttpClient
==
null
)
{
TrustManager
[]
trustManagers
=
buildTrustManagers
();
okHttpClient
=
new
OkHttpClient
.
Builder
()
.
connectTimeout
(
15
,
TimeUnit
.
SECONDS
)
.
writeTimeout
(
20
,
TimeUnit
.
SECONDS
)
.
readTimeout
(
20
,
TimeUnit
.
SECONDS
)
.
sslSocketFactory
(
createSSLSocketFactory
(
trustManagers
),
(
X509TrustManager
)
trustManagers
[
0
])
.
hostnameVerifier
((
hostName
,
session
)
->
true
)
.
retryOnConnectionFailure
(
true
)
.
build
();
addHeader
(
"User-Agent"
,
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
);
}
}
}
}
/**
* 用于异步请求时,控制访问线程数,返回结果
*
* @return
*/
private
static
Semaphore
getSemaphoreInstance
()
{
//只能1个线程同时访问
synchronized
(
HttpClient
.
class
)
{
if
(
semaphore
==
null
)
{
semaphore
=
new
Semaphore
(
0
);
}
}
return
semaphore
;
}
/**
* 创建OkHttpUtils
*
* @return
*/
public
static
HttpClient
builder
()
{
return
new
HttpClient
();
}
/**
* 添加url
*
* @param url
* @return
*/
public
HttpClient
url
(
String
url
)
{
this
.
url
=
url
;
return
this
;
}
/**
* 添加参数
*
* @param key 参数名
* @param value 参数值
* @return
*/
public
HttpClient
addParam
(
String
key
,
String
value
)
{
if
(
paramMap
==
null
)
{
paramMap
=
new
LinkedHashMap
<>(
16
);
}
paramMap
.
put
(
key
,
value
);
return
this
;
}
/**
* 添加请求头
*
* @param key 参数名
* @param value 参数值
* @return
*/
public
HttpClient
addHeader
(
String
key
,
String
value
)
{
if
(
headerMap
==
null
)
{
headerMap
=
new
LinkedHashMap
<>(
16
);
}
headerMap
.
put
(
key
,
value
);
return
this
;
}
/**
* 初始化get方法
*
* @return
*/
public
HttpClient
get
()
{
request
=
new
Request
.
Builder
().
get
();
StringBuilder
urlBuilder
=
new
StringBuilder
(
url
);
if
(
paramMap
!=
null
)
{
urlBuilder
.
append
(
"?"
);
try
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
paramMap
.
entrySet
())
{
urlBuilder
.
append
(
URLEncoder
.
encode
(
entry
.
getKey
(),
"utf-8"
)).
append
(
"="
).
append
(
URLEncoder
.
encode
(
entry
.
getValue
(),
"utf-8"
)).
append
(
"&"
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
urlBuilder
.
deleteCharAt
(
urlBuilder
.
length
()
-
1
);
}
request
.
url
(
urlBuilder
.
toString
());
return
this
;
}
/**
* 初始化post方法
*
* @param isJsonPost true等于json的方式提交数据,类似postman里post方法的raw
* false等于普通的表单提交
* @return
*/
public
HttpClient
post
(
boolean
isJsonPost
)
{
RequestBody
requestBody
;
if
(
isJsonPost
)
{
String
json
=
""
;
if
(
paramMap
!=
null
)
{
json
=
JSON
.
toJSONString
(
paramMap
);
}
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json; charset=utf-8"
),
json
);
}
else
{
FormBody
.
Builder
formBody
=
new
FormBody
.
Builder
();
if
(
paramMap
!=
null
)
{
paramMap
.
forEach
(
formBody:
:
add
);
}
requestBody
=
formBody
.
build
();
}
request
=
new
Request
.
Builder
().
post
(
requestBody
).
url
(
url
);
return
this
;
}
/**
* 同步请求
*
* @return
*/
public
String
sync
()
{
setHeader
(
request
);
try
{
Response
response
=
okHttpClient
.
newCall
(
request
.
build
()).
execute
();
assert
response
.
body
()
!=
null
;
return
response
.
body
().
string
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
"请求失败:"
+
e
.
getMessage
();
}
}
/**
* 异步请求,有返回值
*/
public
String
async
()
{
StringBuilder
buffer
=
new
StringBuilder
(
""
);
setHeader
(
request
);
okHttpClient
.
newCall
(
request
.
build
()).
enqueue
(
new
Callback
()
{
@Override
public
void
onFailure
(
Call
call
,
IOException
e
)
{
buffer
.
append
(
"请求出错:"
).
append
(
e
.
getMessage
());
}
@Override
public
void
onResponse
(
Call
call
,
Response
response
)
throws
IOException
{
assert
response
.
body
()
!=
null
;
buffer
.
append
(
response
.
body
().
string
());
getSemaphoreInstance
().
release
();
}
});
try
{
getSemaphoreInstance
().
acquire
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
buffer
.
toString
();
}
/**
* 异步请求,带有接口回调
*
* @param callBack
*/
public
void
async
(
ICallBack
callBack
)
{
setHeader
(
request
);
okHttpClient
.
newCall
(
request
.
build
()).
enqueue
(
new
Callback
()
{
@Override
public
void
onFailure
(
Call
call
,
IOException
e
)
{
callBack
.
onFailure
(
call
,
e
.
getMessage
());
}
@Override
public
void
onResponse
(
Call
call
,
Response
response
)
throws
IOException
{
assert
response
.
body
()
!=
null
;
callBack
.
onSuccessful
(
call
,
response
.
body
().
string
());
}
});
}
/**
* 为request添加请求头
*
* @param request
*/
private
void
setHeader
(
Request
.
Builder
request
)
{
if
(
headerMap
!=
null
)
{
try
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
headerMap
.
entrySet
())
{
request
.
addHeader
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
/**
* 生成安全套接字工厂,用于https请求的证书跳过
*
* @return
*/
private
static
SSLSocketFactory
createSSLSocketFactory
(
TrustManager
[]
trustAllCerts
)
{
SSLSocketFactory
ssfFactory
=
null
;
try
{
SSLContext
sc
=
SSLContext
.
getInstance
(
"SSL"
);
sc
.
init
(
null
,
trustAllCerts
,
new
SecureRandom
());
ssfFactory
=
sc
.
getSocketFactory
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
ssfFactory
;
}
private
static
TrustManager
[]
buildTrustManagers
()
{
return
new
TrustManager
[]{
new
X509TrustManager
()
{
@Override
public
void
checkClientTrusted
(
X509Certificate
[]
chain
,
String
authType
)
{
}
@Override
public
void
checkServerTrusted
(
X509Certificate
[]
chain
,
String
authType
)
{
}
@Override
public
X509Certificate
[]
getAcceptedIssuers
()
{
return
new
X509Certificate
[]{};
}
}
};
}
/**
* 自定义一个接口回调
*/
public
interface
ICallBack
{
void
onSuccessful
(
Call
call
,
String
data
);
void
onFailure
(
Call
call
,
String
errorMsg
);
}
}
pom.xml
View file @
05728887
...
...
@@ -69,6 +69,7 @@
<module>
core
</module>
<module>
client
</module>
<module>
scheduled
</module>
<module>
im-sdk
</module>
<!-- <module>api-app</module>-->
<!-- <module>distribution</module>-->
<!-- <module>admin</module>-->
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment