Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
ccim_sdk_android
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sheteng
ccim_sdk_android
Commits
05829b3f
Commit
05829b3f
authored
Nov 13, 2021
by
sheteng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
加入心跳
parent
30b8eb2b
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
195 additions
and
101 deletions
+195
-101
.idea/deploymentTargetDropDown.xml
.idea/deploymentTargetDropDown.xml
+17
-0
app/build.gradle
app/build.gradle
+8
-6
app/src/main/java/com/ccwangluo/im/FirstFragment.java
app/src/main/java/com/ccwangluo/im/FirstFragment.java
+1
-1
app/src/main/res/layout/fragment_first.xml
app/src/main/res/layout/fragment_first.xml
+1
-1
ccim/src/main/java/com/ccwangluo/ccim/manage/SocketManageer.java
...c/main/java/com/ccwangluo/ccim/manage/SocketManageer.java
+41
-5
ccim/src/main/java/com/ccwangluo/ccim/modle/PulseData.java
ccim/src/main/java/com/ccwangluo/ccim/modle/PulseData.java
+23
-0
ccim/src/main/proto/chat.proto
ccim/src/main/proto/chat.proto
+104
-88
No files found.
.idea/deploymentTargetDropDown.xml
0 → 100644
View file @
05829b3f
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"deploymentTargetDropDown"
>
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type
value=
"RUNNING_DEVICE_TARGET"
/>
<deviceKey>
<Key>
<type
value=
"SERIAL_NUMBER"
/>
<value
value=
"10.4.6.88:5555"
/>
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown
value=
"2021-11-13T05:39:00.572615Z"
/>
</component>
</project>
\ No newline at end of file
app/build.gradle
View file @
05829b3f
...
@@ -34,17 +34,19 @@ android {
...
@@ -34,17 +34,19 @@ android {
dependencies
{
dependencies
{
def
multidex_version
=
"2.0.1"
def
multidex_version
=
"2.0.1"
implementation
"androidx.multidex:multidex:$multidex_version"
implementation
"androidx.multidex:multidex:$multidex_version"
def
lifecycle_version
=
"2.3.1"
implementation
"androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation
"androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation
'androidx.appcompat:appcompat:1.3.1'
implementation
'androidx.appcompat:appcompat:1.3.1'
implementation
'com.google.android.material:material:1.4.0'
implementation
'com.google.android.material:material:1.4.0'
implementation
'androidx.constraintlayout:constraintlayout:2.1.1'
implementation
'androidx.constraintlayout:constraintlayout:2.1.1'
implementation
'androidx.navigation:navigation-fragment:2.3.0'
implementation
'androidx.navigation:navigation-fragment:2.3.0'
implementation
'androidx.navigation:navigation-ui:2.3.0'
implementation
'androidx.navigation:navigation-ui:2.3.0'
implementation
project
(
path:
':ccim'
)
implementation
project
(
path:
':ccim'
)
testImplementation
'junit:junit:4.+'
implementation
'com.google.protobuf:protobuf-java:3.13.0'
androidTestImplementation
'androidx.test.ext:junit:1.1.2'
implementation
'com.google.protobuf:protobuf-java:3.13.0'
androidTestImplementation
'androidx.test.espresso:espresso-core:3.3.0'
implementation
'com.google.protobuf:protobuf-java-util:3.12.0'
compile
'com.google.protobuf:protobuf-java:3.5.1'
implementation
'com.google.protobuf:protobuf-java:3.8.0'
implementation
'com.google.protobuf:protobuf-java-util:3.8.0'
implementation
'com.guolindev.permissionx:permissionx:1.6.1'
implementation
'com.guolindev.permissionx:permissionx:1.6.1'
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/im/FirstFragment.java
View file @
05829b3f
...
@@ -107,7 +107,7 @@ public class FirstFragment extends Fragment {
...
@@ -107,7 +107,7 @@ public class FirstFragment extends Fragment {
binding
.
searchUser
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
binding
.
searchUser
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
@Override
public
void
onClick
(
View
v
)
{
public
void
onClick
(
View
v
)
{
CCIMClient
.
getInstance
().
searchUser
(
"feng"
,
new
ResultEventCallback
<
List
<
Chat
.
SearchResponse
.
User
>>()
{
CCIMClient
.
getInstance
().
searchUser
(
binding
.
userName
.
getText
().
toString
()
,
new
ResultEventCallback
<
List
<
Chat
.
SearchResponse
.
User
>>()
{
@Override
@Override
public
void
onSuccess
(
List
<
Chat
.
SearchResponse
.
User
>
users
)
{
public
void
onSuccess
(
List
<
Chat
.
SearchResponse
.
User
>
users
)
{
Log
.
d
(
TAG
,
"onSuccess: "
+
users
);
Log
.
d
(
TAG
,
"onSuccess: "
+
users
);
...
...
app/src/main/res/layout/fragment_first.xml
View file @
05829b3f
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:hint=
"userId"
android:hint=
"userId"
android:text=
"10
3
"
/>
android:text=
"10
1
"
/>
<EditText
<EditText
android:id=
"@+id/userName"
android:id=
"@+id/userName"
...
...
ccim/src/main/java/com/ccwangluo/ccim/manage/SocketManageer.java
View file @
05829b3f
...
@@ -7,6 +7,7 @@ import com.ccwangluo.ccim.modle.IrequestData;
...
@@ -7,6 +7,7 @@ import com.ccwangluo.ccim.modle.IrequestData;
import
com.ccwangluo.ccim.modle.MyIReaderProtocol
;
import
com.ccwangluo.ccim.modle.MyIReaderProtocol
;
import
com.ccwangluo.ccim.listener.MessageListener
;
import
com.ccwangluo.ccim.listener.MessageListener
;
import
com.ccwangluo.ccim.listener.ResultEventCallback
;
import
com.ccwangluo.ccim.listener.ResultEventCallback
;
import
com.ccwangluo.ccim.modle.PulseData
;
import
com.ccwangluo.ccim.util.HmacUtil
;
import
com.ccwangluo.ccim.util.HmacUtil
;
import
com.xuhao.didi.core.pojo.OriginalData
;
import
com.xuhao.didi.core.pojo.OriginalData
;
import
com.xuhao.didi.socket.client.sdk.OkSocket
;
import
com.xuhao.didi.socket.client.sdk.OkSocket
;
...
@@ -24,9 +25,9 @@ import ccim.protocol.Push;
...
@@ -24,9 +25,9 @@ import ccim.protocol.Push;
public
class
SocketManageer
{
public
class
SocketManageer
{
private
final
Logger
logger
=
Logger
.
getLogger
(
CCIMClient
.
class
.
getName
());
private
final
Logger
logger
=
Logger
.
getLogger
(
CCIMClient
.
class
.
getName
());
private
static
final
String
SERVER_IP
=
"117.144.156.2"
;
//
private static final String SERVER_IP = "117.144.156.2";
// private static final String SERVER_IP = "192.168.31.216
";
private
static
final
String
SERVER_IP
=
"10.4.5.134
"
;
private
static
final
int
SERVER_PORT
=
800
0
;
private
static
final
int
SERVER_PORT
=
800
1
;
private
static
final
int
version
=
1
;
private
static
final
int
version
=
1
;
...
@@ -64,6 +65,9 @@ public class SocketManageer {
...
@@ -64,6 +65,9 @@ public class SocketManageer {
@Override
@Override
public
void
onSuccess
(
Chat
.
ChatResponseMessage
chatResponseMessage
)
{
public
void
onSuccess
(
Chat
.
ChatResponseMessage
chatResponseMessage
)
{
onConnectListener
.
onSocketConnection
();
onConnectListener
.
onSocketConnection
();
Chat
.
ConnectResponse
connectRes
=
chatResponseMessage
.
getConnectRes
();
long
l
=
connectRes
.
getHeartBeatInterval
()
*
1000L
;
pulseData
(
l
);
}
}
});
});
}
}
...
@@ -77,9 +81,8 @@ public class SocketManageer {
...
@@ -77,9 +81,8 @@ public class SocketManageer {
this
.
chatInfo
=
initServer
(
SERVER_IP
,
SERVER_PORT
,
new
MessageListener
()
{
this
.
chatInfo
=
initServer
(
SERVER_IP
,
SERVER_PORT
,
new
MessageListener
()
{
@Override
@Override
public
void
onServerConnect
()
{
public
void
onServerConnect
()
{
// if(id == 1) {
if
(
id
==
1
)
connectChatServer
(
appKey
,
userName
,
extData
,
userId
,
ts
,
sign
);
connectChatServer
(
appKey
,
userName
,
extData
,
userId
,
ts
,
sign
);
// }
}
}
@Override
@Override
...
@@ -87,6 +90,14 @@ public class SocketManageer {
...
@@ -87,6 +90,14 @@ public class SocketManageer {
try
{
try
{
Chat
.
ChatResponseMessage
chatResponseMessage
=
Chat
.
ChatResponseMessage
.
parseFrom
(
data
.
getBodyBytes
());
Chat
.
ChatResponseMessage
chatResponseMessage
=
Chat
.
ChatResponseMessage
.
parseFrom
(
data
.
getBodyBytes
());
logger
.
info
(
chatResponseMessage
.
toString
());
logger
.
info
(
chatResponseMessage
.
toString
());
if
(
chatResponseMessage
.
hasHeartbeatRes
()){
OkSocket
.
open
(
chatInfo
).
getPulseManager
().
feed
();
return
;
}
if
(
chatResponseMessage
.
hasConnectionStateRes
()){
connectState
();
return
;
}
int
seq
=
chatResponseMessage
.
getHeader
().
getSeq
();
int
seq
=
chatResponseMessage
.
getHeader
().
getSeq
();
ResultEventCallback
<
Chat
.
ChatResponseMessage
>
callBack
=
callBackManager
.
getCallBack
(
seq
);
ResultEventCallback
<
Chat
.
ChatResponseMessage
>
callBack
=
callBackManager
.
getCallBack
(
seq
);
if
(
callBack
!=
null
)
{
if
(
callBack
!=
null
)
{
...
@@ -110,6 +121,29 @@ public class SocketManageer {
...
@@ -110,6 +121,29 @@ public class SocketManageer {
});
});
}
}
/**
* 反馈连接状态给服务器
*/
private
void
connectState
(){
Chat
.
ConnectionStateAckRequest
defaultInstance
=
Chat
.
ConnectionStateAckRequest
.
getDefaultInstance
();
sendRequest
(
defaultInstance
);
}
/**
* 心跳
*/
private
void
pulseData
(
Long
frequency
){
OkSocketOptions
.
Builder
okOptionsBuilder
=
new
OkSocketOptions
.
Builder
();
okOptionsBuilder
.
setPulseFrequency
(
frequency
);
okOptionsBuilder
.
setReaderProtocol
(
new
MyIReaderProtocol
());
OkSocket
.
open
(
getChatInfo
()).
option
(
okOptionsBuilder
.
build
());
Chat
.
ChatRequestMessage
.
Builder
builder
=
Chat
.
ChatRequestMessage
.
newBuilder
();
builder
.
setHeartbeatReq
(
Chat
.
HeartbeatRequest
.
getDefaultInstance
());
OkSocket
.
open
(
getChatInfo
()).
getPulseManager
()
.
setPulseSendable
(
new
PulseData
(
builder
.
build
().
toByteArray
()))
//只需要设置一次,下一次可以直接调用pulse()
.
pulse
();
}
private
ConnectionInfo
initServer
(
String
ip
,
int
port
,
MessageListener
messageListener
)
{
private
ConnectionInfo
initServer
(
String
ip
,
int
port
,
MessageListener
messageListener
)
{
ConnectionInfo
authInfo
=
new
ConnectionInfo
(
ip
,
port
);
ConnectionInfo
authInfo
=
new
ConnectionInfo
(
ip
,
port
);
//调用OkSocket,开启这次连接的通道,拿到通道Manager
//调用OkSocket,开启这次连接的通道,拿到通道Manager
...
@@ -189,6 +223,8 @@ public class SocketManageer {
...
@@ -189,6 +223,8 @@ public class SocketManageer {
builder
.
setRemoveMemberReq
((
Channel
.
RemoveMemberRequest
)
request
);
builder
.
setRemoveMemberReq
((
Channel
.
RemoveMemberRequest
)
request
);
}
else
if
(
request
instanceof
Channel
.
ExitChannelRequest
){
}
else
if
(
request
instanceof
Channel
.
ExitChannelRequest
){
builder
.
setExitChannelReq
((
Channel
.
ExitChannelRequest
)
request
);
builder
.
setExitChannelReq
((
Channel
.
ExitChannelRequest
)
request
);
}
else
if
(
request
instanceof
Chat
.
ConnectionStateAckRequest
){
builder
.
setConnectionStateAckReq
((
Chat
.
ConnectionStateAckRequest
)
request
);
}
}
OkSocket
.
open
(
getChatInfo
())
OkSocket
.
open
(
getChatInfo
())
...
...
ccim/src/main/java/com/ccwangluo/ccim/modle/PulseData.java
0 → 100644
View file @
05829b3f
package
com.ccwangluo.ccim.modle
;
import
com.xuhao.didi.core.iocore.interfaces.IPulseSendable
;
import
java.nio.ByteBuffer
;
import
java.nio.ByteOrder
;
public
class
PulseData
implements
IPulseSendable
{
private
final
byte
[]
body
;
public
PulseData
(
byte
[]
body
){
this
.
body
=
body
;
}
@Override
public
byte
[]
parse
()
{
ByteBuffer
bb
=
ByteBuffer
.
allocate
(
4
+
body
.
length
);
bb
.
order
(
ByteOrder
.
BIG_ENDIAN
);
bb
.
putInt
(
body
.
length
);
bb
.
put
(
body
);
return
bb
.
array
();
}
}
ccim/src/main/proto/chat.proto
View file @
05829b3f
...
@@ -34,6 +34,9 @@ message ChatRequestMessage {
...
@@ -34,6 +34,9 @@ message ChatRequestMessage {
PushPrivateMessageAckRequest
push_private_msg_ack_req
=
61
;
// 推送私人消息成功ack
PushPrivateMessageAckRequest
push_private_msg_ack_req
=
61
;
// 推送私人消息成功ack
PushChannelMessageAckRequest
push_channel_msg_ack_req
=
62
;
// 推送频道消息ack
PushChannelMessageAckRequest
push_channel_msg_ack_req
=
62
;
// 推送频道消息ack
HeartbeatRequest
heartbeat_req
=
100
;
ConnectionStateAckRequest
connection_state_ack_req
=
101
;
}
}
};
};
...
@@ -64,6 +67,9 @@ message ChatResponseMessage {
...
@@ -64,6 +67,9 @@ message ChatResponseMessage {
PushPrivateMessageResponse
push_private_msg_res
=
61
;
PushPrivateMessageResponse
push_private_msg_res
=
61
;
PushChannelMessageResponse
push_channel_msg_res
=
62
;
PushChannelMessageResponse
push_channel_msg_res
=
62
;
HeartbeatResponse
heartbeat_res
=
100
;
ConnectionStateResponse
connection_state_res
=
101
;
}
}
};
};
...
@@ -79,9 +85,9 @@ message ConnectRequest {
...
@@ -79,9 +85,9 @@ message ConnectRequest {
// ts=CurrentTimeMillis (毫秒)
// ts=CurrentTimeMillis (毫秒)
}
}
message
ConnectResponse
{
message
ConnectResponse
{
bool
connected
=
1
;
//是否连接成功
bool
connected
=
1
;
//是否连接成功
int32
heart_beat_interval
=
2
;
}
}
message
PullContactsRequest
{}
message
PullContactsRequest
{}
...
@@ -208,3 +214,13 @@ message ReportIllegalUserRequest {
...
@@ -208,3 +214,13 @@ message ReportIllegalUserRequest {
message
ReportIllegalUserResponse
{}
message
ReportIllegalUserResponse
{}
message
HeartbeatRequest
{
}
message
HeartbeatResponse
{
}
message
ConnectionStateAckRequest
{}
message
ConnectionStateResponse
{
}
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