Commit a3d0a99c authored by sheteng's avatar sheteng

fix

parent 92ff0173
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="testRunner" value="PLATFORM" /> <option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.5-all/exhrs6ca08n232b14ue48lbye/gradle-3.5" /> <option name="gradleHome" value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.5-all/exhrs6ca08n232b14ue48lbye/gradle-3.5" />
......
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
...@@ -7,7 +7,7 @@ android { ...@@ -7,7 +7,7 @@ android {
buildToolsVersion "30.0.3" buildToolsVersion "30.0.3"
defaultConfig { defaultConfig {
applicationId "com.ccwangluo.im" applicationId "com.ccwangluo.xiyuan22"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 30 targetSdkVersion 30
versionCode 1 versionCode 1
...@@ -43,4 +43,7 @@ dependencies { ...@@ -43,4 +43,7 @@ dependencies {
testImplementation 'junit:junit:4.+' testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.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'
} }
\ No newline at end of file
package com.ccwangluo.im; package com.ccwangluo.im;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ccwangluo.ccim.CCClient; import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.listener.ResultCallback; import com.ccwangluo.ccim.listener.ResultCallback;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.ccwangluo.im.databinding.FragmentFirstBinding; import com.ccwangluo.im.databinding.FragmentFirstBinding;
import java.util.ArrayList;
import java.util.List;
import ccim.protocol.Chat;
import ccim.protocol.Message;
public class FirstFragment extends Fragment { public class FirstFragment extends Fragment {
private FragmentFirstBinding binding; private FragmentFirstBinding binding;
private static final String TAG = FirstFragment.class.getName();
@Override @Override
public View onCreateView( public View onCreateView(
...@@ -24,124 +36,212 @@ public class FirstFragment extends Fragment { ...@@ -24,124 +36,212 @@ public class FirstFragment extends Fragment {
binding = FragmentFirstBinding.inflate(inflater, container, false); binding = FragmentFirstBinding.inflate(inflater, container, false);
return binding.getRoot(); return binding.getRoot();
} }
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
CCClient.getInstance().init(getActivity()); CCIMClient.getInstance().initSDK();
binding.buttonLogin.setOnClickListener(new View.OnClickListener() { CCIMClient.getInstance().registerMessageListener(new ResultEventCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onClick(View v) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
CCClient.getInstance().login("user1","123456",new ResultCallback<String>(){ new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override @Override
public void onSuccess(String s) { public void run() {
Toast.makeText(getContext(),chatResponseMessage.toString(),Toast.LENGTH_SHORT).show();
} }
}); });
} }
}); });
binding.connectChatServer.setOnClickListener(new View.OnClickListener() { binding.buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().connectChatServer(); CCIMClient.getInstance().login("user1","123456",1L,new ResultCallback(){
@Override
public void onSuccess() {
}
// @Override
// public void onFailed(int errorCode) {
//
// }
});
} }
}); });
binding.getChatList.setOnClickListener(new View.OnClickListener() { binding.getChatList.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().getChatList(); CCIMClient.getInstance().getChatList(new ResultEventCallback<Chat.PullContactsResponse>() {
@Override
public void onSuccess(Chat.PullContactsResponse pullContactsResponse) {
List<Chat.PullContactsResponse.Channel> channelsList = pullContactsResponse.getChannelsList();
Log.d(TAG, "channelsList: " + channelsList.toString());
List<Chat.PullContactsResponse.ContactGroup> contactGroupsList = pullContactsResponse.getContactGroupsList();
Log.d(TAG, "contactGroupsList: " + contactGroupsList.toString());
List<Chat.PullContactsResponse.Contact> contactsList = pullContactsResponse.getContactsList();
Log.d(TAG, "contactsList: " + contactsList.toString());
}
});
} }
}); });
binding.getOfflineMessage.setOnClickListener(new View.OnClickListener() { binding.getOfflineMessage.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().getOfflineMessage(); CCIMClient.getInstance().getOfflineMessage(new ResultEventCallback<ArrayList<Message.PullOfflineMessageResponse.OfflineMessage>>() {
@Override
public void onSuccess(ArrayList<Message.PullOfflineMessageResponse.OfflineMessage> offlineMessages) {
Log.d(TAG, "offlineMessages: " + offlineMessages.toString());
}
});
} }
}); });
binding.searchUser.setOnClickListener(new View.OnClickListener() { binding.searchUser.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().searchUser("user2"); CCIMClient.getInstance().searchUser("user2", new ResultEventCallback<List<Chat.SearchResponse.User>>() {
@Override
public void onSuccess(List<Chat.SearchResponse.User> users) {
Log.d(TAG, "onSuccess: " + users);
}
});
} }
}); });
binding.addUser.setOnClickListener(new View.OnClickListener() { binding.addUser.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().addContact(Long.parseLong(binding.userId.getText().toString())); CCIMClient.getInstance().addContact(Long.parseLong(binding.userId.getText().toString()), new ResultEventCallback<Chat.AddContactResponse.AddResult>() {
@Override
public void onSuccess(Chat.AddContactResponse.AddResult addResult) {
}
});
} }
}); });
binding.sendTextMessage.setOnClickListener(new View.OnClickListener() { binding.sendTextMessage.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().sendTextMessage("你好",Long.parseLong(binding.userId.getText().toString())); CCIMClient.getInstance().sendTextMessage("你好", Long.parseLong(binding.userId.getText().toString()), new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.getContactRequests.setOnClickListener(new View.OnClickListener() { binding.getContactRequests.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().getContactRequests(); CCIMClient.getInstance().getContactRequests(new ResultEventCallback<Chat.ContactRequestsResponse>() {
@Override
public void onSuccess(Chat.ContactRequestsResponse contactRequestsResponse) {
}
});
} }
}); });
binding.checkContactRequests.setOnClickListener(new View.OnClickListener() { binding.checkContactRequests.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().checkContactReq(Long.parseLong(binding.userId.getText().toString()),true); CCIMClient.getInstance().checkContactReq(Long.parseLong(binding.userId.getText().toString()), true, new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.createContactGroupRequest.setOnClickListener(new View.OnClickListener() { binding.createContactGroupRequest.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().createContactGroup("zhangsan"); CCIMClient.getInstance().createContactGroup("zhangsan", new ResultEventCallback<Long>() {
@Override
public void onSuccess(Long aLong) {
}
});
} }
}); });
binding.moveContactGroupRequest.setOnClickListener(new View.OnClickListener() { binding.moveContactGroupRequest.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().moveContactGroup(Long.parseLong(binding.groupId.getText().toString()),Long.parseLong(binding.userId.getText().toString())); CCIMClient.getInstance().moveContactGroup(Long.parseLong(binding.groupId.getText().toString()), Long.parseLong(binding.userId.getText().toString()), new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.deleteContact.setOnClickListener(new View.OnClickListener() { binding.deleteContact.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().deleteContact(Long.parseLong(binding.userId.getText().toString())); CCIMClient.getInstance().deleteContact(Long.parseLong(binding.userId.getText().toString()), new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.blockContact.setOnClickListener(new View.OnClickListener() { binding.blockContact.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().blockContact(Long.parseLong(binding.userId.getText().toString()),true); CCIMClient.getInstance().blockContact(Long.parseLong(binding.userId.getText().toString()), true, new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.reportIllegalUser.setOnClickListener(new View.OnClickListener() { binding.reportIllegalUser.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().reportIllegalUser("搞黄色","搞黄色",Long.parseLong(binding.userId.getText().toString())); CCIMClient.getInstance().reportIllegalUser("搞黄色", "搞黄色", Long.parseLong(binding.userId.getText().toString()), new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.sendGroupMessage.setOnClickListener(new View.OnClickListener() { binding.sendGroupMessage.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().sendGroupMessage("搞黄色",Long.parseLong(binding.groupId.getText().toString())); CCIMClient.getInstance().sendGroupMessage("搞黄色", Long.parseLong(binding.groupId.getText().toString()), new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
binding.sendChannelMessage.setOnClickListener(new View.OnClickListener() { binding.sendChannelMessage.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
CCClient.getInstance().sendChannelMessage("搞黄色",Long.parseLong(binding.channelId.getText().toString())); CCIMClient.getInstance().sendChannelMessage("搞黄色", Long.parseLong(binding.channelId.getText().toString()), new ResultCallback() {
@Override
public void onSuccess() {
}
});
} }
}); });
......
...@@ -6,9 +6,15 @@ ...@@ -6,9 +6,15 @@
android:orientation="horizontal" android:orientation="horizontal"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".FirstFragment"> tools:context=".FirstFragment">
<LinearLayout
<ScrollView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1" android:layout_weight="1"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:layout_height="match_parent"> android:layout_height="match_parent">
...@@ -18,15 +24,8 @@ ...@@ -18,15 +24,8 @@
android:id="@+id/button_login" android:id="@+id/button_login"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="login" /> android:text="登录" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/connectChatServer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="connectChatServer" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -34,7 +33,7 @@ ...@@ -34,7 +33,7 @@
android:id="@+id/getChatList" android:id="@+id/getChatList"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="getChatList" /> android:text="获取联系人列表" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -42,7 +41,7 @@ ...@@ -42,7 +41,7 @@
android:id="@+id/getOfflineMessage" android:id="@+id/getOfflineMessage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="getOfflineMessage" /> android:text="同步离线消息" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -50,7 +49,7 @@ ...@@ -50,7 +49,7 @@
android:id="@+id/searchUser" android:id="@+id/searchUser"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="searchUser" /> android:text="查找好友" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -58,7 +57,7 @@ ...@@ -58,7 +57,7 @@
android:id="@+id/addUser" android:id="@+id/addUser"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="addUser" /> android:text="添加好友" />
...@@ -68,7 +67,7 @@ ...@@ -68,7 +67,7 @@
android:id="@+id/getContactRequests" android:id="@+id/getContactRequests"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="getContactRequests" /> android:text="联系人申请列表" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -76,7 +75,7 @@ ...@@ -76,7 +75,7 @@
android:id="@+id/checkContactRequests" android:id="@+id/checkContactRequests"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="checkContactRequests" /> android:text="验证联系人申请" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -84,7 +83,7 @@ ...@@ -84,7 +83,7 @@
android:id="@+id/sendTextMessage" android:id="@+id/sendTextMessage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="sendTextMessage" /> android:text="发送消息" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -92,12 +91,15 @@ ...@@ -92,12 +91,15 @@
android:id="@+id/createContactGroupRequest" android:id="@+id/createContactGroupRequest"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="createContactGroup" /> android:text="创建联系人组" />
</LinearLayout> </LinearLayout>
</ScrollView>
<LinearLayout <ScrollView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1" android:layout_weight="1"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:layout_height="match_parent"> android:layout_height="match_parent">
<EditText <EditText
...@@ -124,7 +126,7 @@ ...@@ -124,7 +126,7 @@
android:id="@+id/moveContactGroupRequest" android:id="@+id/moveContactGroupRequest"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="moveContactGroup" /> android:text="移动联系人所在群组" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -132,7 +134,7 @@ ...@@ -132,7 +134,7 @@
android:id="@+id/deleteContact" android:id="@+id/deleteContact"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="deleteContact" /> android:text="删除联系人" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -140,7 +142,7 @@ ...@@ -140,7 +142,7 @@
android:id="@+id/blockContact" android:id="@+id/blockContact"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="blockContact" /> android:text="拉黑联系人" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -148,7 +150,7 @@ ...@@ -148,7 +150,7 @@
android:id="@+id/reportIllegalUser" android:id="@+id/reportIllegalUser"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="reportIllegalUser" /> android:text="举报违规用户" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -156,7 +158,7 @@ ...@@ -156,7 +158,7 @@
android:id="@+id/sendGroupMessage" android:id="@+id/sendGroupMessage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="sendGroupMessage" /> android:text="发送群组消息" />
<Button <Button
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -164,9 +166,10 @@ ...@@ -164,9 +166,10 @@
android:id="@+id/sendChannelMessage" android:id="@+id/sendChannelMessage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="sendChannelMessage" /> android:text="发送频道消息" />
</LinearLayout> </LinearLayout>
</ScrollView>
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -40,3 +40,8 @@ ...@@ -40,3 +40,8 @@
-keep class com.xuhao.didi.socket.server.impl.OkServerOptions$* { -keep class com.xuhao.didi.socket.server.impl.OkServerOptions$* {
*; *;
} }
-keep class com.ccwangluo.ccim.CCClient$* {
*;
}
package com.ccwangluo.ccim; package com.ccwangluo.ccim;
import android.app.Activity;
import android.text.TextUtils;
import com.ccwangluo.ccim.listener.ResultCallback; import com.ccwangluo.ccim.listener.ResultCallback;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.ccwangluo.ccim.manage.CallBackManager; import com.ccwangluo.ccim.manage.CallBackManager;
import com.ccwangluo.ccim.manage.SocketManageer; import com.ccwangluo.ccim.manage.SocketManageer;
import com.ccwangluo.ccim.modle.IrequestData;
import com.xuhao.didi.socket.client.sdk.OkSocket;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import ccim.protocol.Chat; import ccim.protocol.Chat;
import ccim.protocol.Common;
import ccim.protocol.Message; import ccim.protocol.Message;
import ccim.protocol.MessageSpec; import ccim.protocol.MessageSpec;
import ccim.protocol.Push;
public class CCClient { public class CCIMClient {
private Logger logger = Logger.getLogger(CCClient.class.getName()); private final Logger logger = Logger.getLogger(CCIMClient.class.getName());
private final int version = 1;
private volatile int id = 1;
private SocketManageer socketManageer; private SocketManageer socketManageer;
private CallBackManager<Chat.ChatResponseMessage> callBackManager; private CallBackManager<Chat.ChatResponseMessage> callBackManager;
private CCClient() { private CCIMClient() {
} }
private static CCClient mInstance; private static CCIMClient mInstance;
public static CCClient getInstance() { public static CCIMClient getInstance() {
if (mInstance == null) { if (mInstance == null) {
synchronized (CCClient.class) { synchronized (CCIMClient.class) {
if (mInstance == null) { if (mInstance == null) {
mInstance = new CCClient(); mInstance = new CCIMClient();
} }
} }
} }
return mInstance; return mInstance;
} }
public void init(Activity activity) { public void initSDK() {
callBackManager = new CallBackManager<Chat.ChatResponseMessage>(); callBackManager = new CallBackManager<>();
socketManageer = new SocketManageer(callBackManager); socketManageer = new SocketManageer(callBackManager);
socketManageer.initAuth(); socketManageer.initAuth();
} }
// public void registerMessageListener() public void registerMessageListener(ResultEventCallback<Chat.ChatResponseMessage> resultEventCallback) {
callBackManager.addCallBack(0, chatResponseMessage -> {
logger.info("registerMessageListener : " + chatResponseMessage);
if (chatResponseMessage.hasPushPrivateMsgRes()) {
MessageSpec.ChatMessage pushPrivateMsgRes = chatResponseMessage.getPushPrivateMsgRes().getMessage();
pushPrivateMessageAck(pushPrivateMsgRes.getSenderUserId(), pushPrivateMsgRes.getMsgId());
}
if (chatResponseMessage.hasPushGroupMsgRes()) {
Push.PushGroupMessageResponse message = chatResponseMessage.getPushGroupMsgRes();
pushGroupMessageAck(message.getGroupId(), message.getMessage().getMsgId());
}
if (chatResponseMessage.hasPushChannelMsgRes()) {
Push.PushChannelMessageResponse channelMsgRes = chatResponseMessage.getPushChannelMsgRes();
pushChannelMessage(channelMsgRes.getChannelId(), channelMsgRes.getMessage().getMsgId());
}
resultEventCallback.onSuccess(chatResponseMessage);
});
}
public void login(String username, String password, ResultCallback<String> resultCallback) { public void login(String username, String password,Long appId, ResultCallback resultEventCallback) {
socketManageer.login(username, password, resultCallback); socketManageer.login(username, password, appId,new ResultEventCallback<String>() {
@Override
public void onSuccess(String s) {
resultEventCallback.onSuccess();
} }
public void connectChatServer() {
if (TextUtils.isEmpty(socketManageer.getToken())) {
return;
}
Chat.ConnectRequest builder = Chat.ConnectRequest.newBuilder().setToken(socketManageer.getToken()).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder().setConnectReq(builder).setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onFailed(int errorCode) {
if (chatResponseMessage.hasConnectRes()) { resultEventCallback.onFailed(errorCode);
logger.info("chat connect success");
}
} }
}); });
id++;
} }
/** /**
* 获取联系人列表 * 获取联系人列表
*/ */
public void getChatList() { public synchronized void getChatList(ResultEventCallback<Chat.PullContactsResponse> resultEventCallback) {
Chat.PullContactsRequest builder = Chat.PullContactsRequest.newBuilder() Chat.PullContactsRequest builder = Chat.PullContactsRequest.newBuilder()
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(builder);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder().setPullContactsReq(builder).setHeader(header).build(); callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasPullContactsRes()) { if (chatResponseMessage.hasPullContactsRes()) {
logger.info(String.valueOf(chatResponseMessage.getPullContactsRes())); logger.info(String.valueOf(chatResponseMessage));
Chat.PullContactsResponse pullContactsRes = chatResponseMessage.getPullContactsRes();
resultEventCallback.onSuccess(pullContactsRes);
}
} }
@Override
public void onFailed(int errorCode) {
resultEventCallback.onFailed(errorCode);
} }
}); });
id++;
} }
/** /**
* 同步离线消息 * 同步离线消息
*/ */
public void getOfflineMessage() { public void getOfflineMessage(ResultEventCallback<ArrayList<Message.PullOfflineMessageResponse.OfflineMessage>> resultEventCallback) {
ArrayList<Message.PullOfflineMessageResponse.OfflineMessage> offlineMessages = new ArrayList<>();
Message.PullOfflineMessageRequest offlineMessageRequest = Message.PullOfflineMessageRequest.newBuilder().build(); Message.PullOfflineMessageRequest offlineMessageRequest = Message.PullOfflineMessageRequest.newBuilder().build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest( offlineMessageRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setPullOfflineMsgReq(offlineMessageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasPullOfflineMsgRes()) { if (chatResponseMessage.hasPullOfflineMsgRes()) {
logger.info(String.valueOf(chatResponseMessage.getPullOfflineMsgRes())); logger.info(String.valueOf(chatResponseMessage));
List<Message.PullOfflineMessageResponse.OfflineMessage> offlineMsgsList = chatResponseMessage.getPullOfflineMsgRes().getOfflineMsgsList();
offlineMessages.addAll(offlineMsgsList);
if (offlineMsgsList.isEmpty()) {
resultEventCallback.onSuccess(offlineMessages);
callBackManager.removeCallBack(chatResponseMessage.getHeader().getSeq());
}
}
} }
@Override
public void onFailed(int errorCode) {
resultEventCallback.onFailed(errorCode);
} }
}); });
id++;
} }
/** /**
* 搜索好友 * 搜索好友
*/ */
public void searchUser(String userName) { public void searchUser(String userName, ResultEventCallback<List<Chat.SearchResponse.User>> resultEventCallback) {
Chat.SearchRequest searchRequest = Chat.SearchRequest.newBuilder().setUsername(userName).build(); Chat.SearchRequest searchRequest = Chat.SearchRequest.newBuilder().setUsername(userName).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(searchRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setSearchReq(searchRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSearchRes()) { if (chatResponseMessage.hasSearchRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
List<Chat.SearchResponse.User> searchRes = chatResponseMessage.getSearchRes().getUsersList();
resultEventCallback.onSuccess(searchRes);
} }
} }
@Override
public void onFailed(int errorCode) {
resultEventCallback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 添加好友 * 添加好友
*/ */
public void addContact(Long userId) { public void addContact(Long userId, ResultEventCallback<Chat.AddContactResponse.AddResult> callback) {
Chat.AddContactRequest addContactRequest = Chat.AddContactRequest.newBuilder().setUserId(userId).build(); Chat.AddContactRequest addContactRequest = Chat.AddContactRequest.newBuilder().setUserId(userId).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(addContactRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setAddContactReq(addContactRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasAddContactRes()) { if (chatResponseMessage.hasAddContactRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
Chat.AddContactResponse addContactRes = chatResponseMessage.getAddContactRes();
Chat.AddContactResponse.AddResult result = addContactRes.getResult();
callback.onSuccess(result);
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 联系人申请列表 * 联系人申请列表
*/ */
public void getContactRequests() { public void getContactRequests(ResultEventCallback<Chat.ContactRequestsResponse> callback) {
Chat.ContactRequestsRequest contactRequestsRequest = Chat.ContactRequestsRequest.newBuilder().build(); Chat.ContactRequestsRequest contactRequestsRequest = Chat.ContactRequestsRequest.newBuilder().build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(contactRequestsRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setContactRequestsReq(contactRequestsRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasContactRequestsRes()) { if (chatResponseMessage.hasContactRequestsRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
Chat.ContactRequestsResponse contactRequestsRes = chatResponseMessage.getContactRequestsRes();
callback.onSuccess(contactRequestsRes);
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 验证联系人申请 * 验证联系人申请
*/ */
public void checkContactReq(Long reqUserId,boolean accept) { public void checkContactReq(Long reqUserId, boolean accept, ResultCallback callback) {
Chat.CheckContactReqRequest checkContactReqRequest = Chat.CheckContactReqRequest.newBuilder() Chat.CheckContactReqRequest checkContactReqRequest = Chat.CheckContactReqRequest.newBuilder()
.setReqUserId(reqUserId) .setReqUserId(reqUserId)
.setAccept(accept) .setAccept(accept)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(checkContactReqRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setCheckContactReqReq(checkContactReqRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasCheckContactReqRes()) { if (chatResponseMessage.hasCheckContactReqRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 创建联系人群组 * 创建联系人群组
*/ */
public void createContactGroup(String name) { public void createContactGroup(String name, ResultEventCallback<Long> callback) {
Chat.CreateContactGroupRequest createContactGroupRequest = Chat.CreateContactGroupRequest.newBuilder() Chat.CreateContactGroupRequest createContactGroupRequest = Chat.CreateContactGroupRequest.newBuilder()
.setName(name) .setName(name)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(createContactGroupRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setCreateContactGroupReq(createContactGroupRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasCreateContactGroupRes()) { if (chatResponseMessage.hasCreateContactGroupRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
Chat.CreateContactGroupResponse createContactGroupRes = chatResponseMessage.getCreateContactGroupRes();
callback.onSuccess(createContactGroupRes.getGroupId());
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 移动联系人所在的群组 * 移动联系人所在的群组
*/ */
public void moveContactGroup(Long groupId,Long userId) { public void moveContactGroup(Long groupId, Long userId, ResultCallback callback) {
Chat.MoveContactGroupRequest moveContactGroupRequest = Chat.MoveContactGroupRequest.newBuilder() Chat.MoveContactGroupRequest moveContactGroupRequest = Chat.MoveContactGroupRequest.newBuilder()
.setContactGroupId(groupId) .setContactGroupId(groupId)
.setContactUserId(userId) .setContactUserId(userId)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(moveContactGroupRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setMoveContactGroupReq(moveContactGroupRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasMoveContactGroupRes()) { if (chatResponseMessage.hasMoveContactGroupRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 删除联系人 * 删除联系人
*/ */
public void deleteContact(Long userId) { public void deleteContact(Long userId, ResultCallback callback) {
Chat.DeleteContactRequest deleteContactRequest = Chat.DeleteContactRequest.newBuilder() Chat.DeleteContactRequest deleteContactRequest = Chat.DeleteContactRequest.newBuilder()
.setContactUserId(userId) .setContactUserId(userId)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(deleteContactRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setDeleteContactReq(deleteContactRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasDeleteContactRes()) { if (chatResponseMessage.hasDeleteContactRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
}
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
} }
}); });
id++;
} }
/** /**
* 拉黑联系人 * 拉黑联系人
*/ */
public void blockContact(Long userId,Boolean mute) { public void blockContact(Long userId, Boolean mute, ResultCallback callback) {
Chat.BlockContactRequest blockContactRequest = Chat.BlockContactRequest.newBuilder() Chat.BlockContactRequest blockContactRequest = Chat.BlockContactRequest.newBuilder()
.setContactUserId(userId) .setContactUserId(userId)
.setMute(mute) .setMute(mute)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(blockContactRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setBlockContactReq(blockContactRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasBlockContactRes()) { if (chatResponseMessage.hasBlockContactRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
}
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
} }
}); });
id++;
} }
/** /**
* 举报违规用户 * 举报违规用户
*/ */
public void reportIllegalUser(String title,String content,Long userId) { public void reportIllegalUser(String title, String content, Long userId, ResultCallback callback) {
Chat.ReportIllegalUserRequest reportIllegalUserRequest = Chat.ReportIllegalUserRequest.newBuilder() Chat.ReportIllegalUserRequest reportIllegalUserRequest = Chat.ReportIllegalUserRequest.newBuilder()
.setContent(content) .setContent(content)
.setIllegalUserId(userId) .setIllegalUserId(userId)
.setTitle(title) .setTitle(title)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build(); int id = socketManageer.sendRequest(reportIllegalUserRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setReportIllegalUserReq(reportIllegalUserRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasReportIllegalUserRes()) { if (chatResponseMessage.hasReportIllegalUserRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 发送消息 * 发送消息
*/ */
public void sendTextMessage(String content, Long reciveUserId) { public void sendTextMessage(String content, Long reciveUserId, ResultCallback callback) {
Message.SendMessageRequest messageRequest = Message.SendMessageRequest.newBuilder() Message.SendMessageRequest messageRequest = Message.SendMessageRequest.newBuilder()
.setContent(content) .setContent(content)
.setMsgType(MessageSpec.MessageType.TEXT) .setMsgType(MessageSpec.MessageType.TEXT)
.setReceiverUserId(reciveUserId).build(); .setReceiverUserId(reciveUserId).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(id).build(); int id = socketManageer.sendRequest(messageRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setSendMsgReq(messageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSendMsgRes()) { if (chatResponseMessage.hasSendMsgRes()) {
logger.info(String.valueOf(chatResponseMessage.getSearchRes())); logger.info(String.valueOf(chatResponseMessage.getSearchRes()));
callback.onSuccess();
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/** /**
* 发送群组消息 * 发送群组消息
*/ */
public void sendGroupMessage(String content, Long groupId) { public void sendGroupMessage(String content, Long groupId, ResultCallback callback) {
Message.SendGroupMessageRequest sendGroupMessageRequest = Message.SendGroupMessageRequest.newBuilder() Message.SendGroupMessageRequest sendGroupMessageRequest = Message.SendGroupMessageRequest.newBuilder()
.setContent(content) .setContent(content)
.setMsgType(MessageSpec.MessageType.TEXT) .setMsgType(MessageSpec.MessageType.TEXT)
.setGroupId(groupId) .setGroupId(groupId)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(id).build(); int id = socketManageer.sendRequest(sendGroupMessageRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setSendGroupMsgReq(sendGroupMessageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSendGroupMsgRes()) { if (chatResponseMessage.hasSendGroupMsgRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
}
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
} }
}); });
id++;
} }
/** /**
* 发送群组消息 * 发送群组消息
*/ */
public void sendChannelMessage(String content, Long channelId) { public void sendChannelMessage(String content, Long channelId, ResultCallback callback) {
Message.SendChannelMessageRequest sendChannelMessageRequest = Message.SendChannelMessageRequest.newBuilder() Message.SendChannelMessageRequest sendChannelMessageRequest = Message.SendChannelMessageRequest.newBuilder()
.setContent(content) .setContent(content)
.setMsgType(MessageSpec.MessageType.TEXT) .setMsgType(MessageSpec.MessageType.TEXT)
.setChannelId(channelId) .setChannelId(channelId)
.build(); .build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(id).build(); int id = socketManageer.sendRequest(sendChannelMessageRequest);
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder() callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
.setSendChannelMsgReq(sendChannelMessageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override @Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) { public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSendChannelMsgRes()) { if (chatResponseMessage.hasSendChannelMsgRes()) {
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess();
} }
} }
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
}); });
id++;
} }
/**
* 推送私人消息成功ack
*/
public void pushPrivateMessageAck(Long contactUserId, Long msgId) {
Push.PushPrivateMessageAckRequest pushPrivateMessageAckRequest = Push.PushPrivateMessageAckRequest.newBuilder()
.setContactUserId(contactUserId)
.setMsgId(msgId)
.build();
int id = socketManageer.sendRequest(pushPrivateMessageAckRequest);
callBackManager.addCallBack(id, chatResponseMessage -> logger.info(String.valueOf(chatResponseMessage)));
}
/**
* 推送渠道消息成功ack
*/
public void pushGroupMessageAck(Long groupId, Long msgId) {
Push.PushGroupMessageAckRequest groupMessageAckRequest = Push.PushGroupMessageAckRequest.newBuilder()
.setGroupId(groupId)
.setMsgId(msgId)
.build();
int id = socketManageer.sendRequest(groupMessageAckRequest);
callBackManager.addCallBack(id, chatResponseMessage -> logger.info(String.valueOf(chatResponseMessage)));
}
/**
* 推送渠道消息成功ack
*/
public void pushChannelMessage(Long channelId, Long msgId) {
Push.PushChannelMessageAckRequest channelMessageAckRequest = Push.PushChannelMessageAckRequest.newBuilder()
.setChannelId(channelId)
.setMsgId(msgId)
.build();
int id = socketManageer.sendRequest(channelMessageAckRequest);
callBackManager.addCallBack(id, chatResponseMessage -> logger.info(String.valueOf(chatResponseMessage)));
}
} }
package com.ccwangluo.ccim.listener;
import ccim.protocol.Chat;
import ccim.protocol.Push;
public interface MessageEventCallback {
// void onRecvMessage(Push)
}
...@@ -3,5 +3,8 @@ package com.ccwangluo.ccim.listener; ...@@ -3,5 +3,8 @@ package com.ccwangluo.ccim.listener;
import com.xuhao.didi.core.pojo.OriginalData; import com.xuhao.didi.core.pojo.OriginalData;
public interface MessageListener { public interface MessageListener {
default void onServerConnect(){
}
void onMessageListener(OriginalData data); void onMessageListener(OriginalData data);
} }
package com.ccwangluo.ccim.listener; package com.ccwangluo.ccim.listener;
public interface ResultCallback<T> { public interface ResultCallback {
void onSuccess(T t); void onSuccess();
default void onFailed(int errorCode){
};
} }
package com.ccwangluo.ccim.listener;
public interface ResultEventCallback<T> {
void onSuccess(T t);
default void onFailed(int errorCode){
}
}
package com.ccwangluo.ccim.manage; package com.ccwangluo.ccim.manage;
import com.ccwangluo.ccim.listener.ResultCallback; import android.os.Handler;
import android.os.Looper;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import java.util.HashMap; import java.util.HashMap;
public class CallBackManager<T> { public class CallBackManager<T> {
private HashMap<Integer, ResultCallback<T>> callbackHashMap = new HashMap<>(); private final HashMap<Integer, ResultEventCallback<T>> callbackHashMap = new HashMap<>();
private final int time_out = 60 * 1000;
public void addCallBack(int id, ResultCallback<T> resultCallback) {
callbackHashMap.put(id, resultCallback); public synchronized void addCallBack(int id, ResultEventCallback<T> resultEventCallback) {
callbackHashMap.put(id, resultEventCallback);
//设置60秒超时
new Handler(Looper.getMainLooper()).postDelayed(() -> {
ResultEventCallback<T> callBack = getCallBack(id);
if (callBack != null){
removeCallBack(id);
callBack.onFailed(999);
}
},time_out);
} }
public ResultCallback<T> getCallBack(int id) { public synchronized ResultEventCallback<T> getCallBack(int id) {
return callbackHashMap.get(id); return callbackHashMap.get(id);
} }
public void removeCallBack(int id) { public synchronized void removeCallBack(int id) {
callbackHashMap.remove(id); callbackHashMap.remove(id);
} }
......
package com.ccwangluo.ccim.manage; package com.ccwangluo.ccim.manage;
import com.ccwangluo.ccim.CCClient; import android.text.TextUtils;
import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.modle.IrequestData; 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.ResultCallback; import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.google.protobuf.InvalidProtocolBufferException;
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;
import com.xuhao.didi.socket.client.sdk.client.ConnectionInfo; import com.xuhao.didi.socket.client.sdk.client.ConnectionInfo;
...@@ -17,11 +18,18 @@ import java.util.logging.Logger; ...@@ -17,11 +18,18 @@ import java.util.logging.Logger;
import ccim.protocol.Auth; import ccim.protocol.Auth;
import ccim.protocol.Chat; import ccim.protocol.Chat;
import ccim.protocol.Common;
import ccim.protocol.Message;
import ccim.protocol.Push;
public class SocketManageer { public class SocketManageer {
private Logger logger = Logger.getLogger(CCClient.class.getName()); private final Logger logger = Logger.getLogger(CCIMClient.class.getName());
private final int version = 1;
private CallBackManager<Chat.ChatResponseMessage> callBackManager; private volatile int id = 1;
private final CallBackManager<Chat.ChatResponseMessage> callBackManager;
public SocketManageer(CallBackManager<Chat.ChatResponseMessage> callBackManager) { public SocketManageer(CallBackManager<Chat.ChatResponseMessage> callBackManager) {
this.callBackManager = callBackManager; this.callBackManager = callBackManager;
} }
...@@ -30,7 +38,7 @@ public class SocketManageer { ...@@ -30,7 +38,7 @@ public class SocketManageer {
private ConnectionInfo chatInfo; private ConnectionInfo chatInfo;
private String token; private String token;
private ResultCallback<String> loginCallBack; private ResultEventCallback<String> loginCallBack;
public String getToken() { public String getToken() {
return token; return token;
...@@ -40,35 +48,19 @@ public class SocketManageer { ...@@ -40,35 +48,19 @@ public class SocketManageer {
this.token = token; this.token = token;
} }
public Logger getLogger() {
return logger;
}
public void setLogger(Logger logger) {
this.logger = logger;
}
public ConnectionInfo getAuthInfo() { public ConnectionInfo getAuthInfo() {
return authInfo; return authInfo;
} }
public void setAuthInfo(ConnectionInfo authInfo) {
this.authInfo = authInfo;
}
public ConnectionInfo getChatInfo() { public ConnectionInfo getChatInfo() {
return chatInfo; return chatInfo;
} }
public void setChatInfo(ConnectionInfo chatInfo) {
this.chatInfo = chatInfo;
}
public void initAuth() { public void initAuth() {
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样 //连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
this.authInfo = initServer("117.144.156.2", 9000, new MessageListener() { this.authInfo = initServer("117.144.156.2", 9000, data -> {
@Override
public void onMessageListener(OriginalData data) {
try { try {
Auth.AuthResponseMessage chatResponseMessage = Auth.AuthResponseMessage.parseFrom(data.getBodyBytes()); Auth.AuthResponseMessage chatResponseMessage = Auth.AuthResponseMessage.parseFrom(data.getBodyBytes());
logger.info(String.valueOf(chatResponseMessage)); logger.info(String.valueOf(chatResponseMessage));
...@@ -80,44 +72,68 @@ public class SocketManageer { ...@@ -80,44 +72,68 @@ public class SocketManageer {
if (loginCallBack != null){ if (loginCallBack != null){
loginCallBack.onSuccess(token); loginCallBack.onSuccess(token);
} }
} else {
if (loginCallBack != null){
loginCallBack.onFailed(chatResponseMessage.getHeader().getCode());
}
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}
}); });
} }
public void login(String username, String password, ResultCallback<String> resultCallback) { public void login(String username, String password,Long appId, ResultEventCallback<String> resultEventCallback) {
Auth.LoginRequest.Builder builder = Auth.LoginRequest.newBuilder().setUsername("user1").setPassword("123456").setAppId(1); Auth.LoginRequest.Builder builder = Auth.LoginRequest.newBuilder().setUsername(username).setPassword(password).setAppId(appId);
Auth.AuthRequestMessage build = Auth.AuthRequestMessage.newBuilder().setLoginReq(builder.build()).build(); Auth.AuthRequestMessage build = Auth.AuthRequestMessage.newBuilder().setLoginReq(builder.build()).build();
OkSocket.open(getAuthInfo()) OkSocket.open(getAuthInfo())
.send(new IrequestData(build.toByteArray())); .send(new IrequestData(build.toByteArray()));
this.loginCallBack = resultCallback; this.loginCallBack = resultEventCallback;
}
public void connectChatServer() {
if (TextUtils.isEmpty(getToken())) {
return;
}
Chat.ConnectRequest builder = Chat.ConnectRequest.newBuilder().setToken(getToken()).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(1).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder().setConnectReq(builder).setHeader(header).build();
OkSocket.open(getChatInfo())
.send(new IrequestData(build.toByteArray()));
} }
private void initChat(String server) { private void initChat(String server) {
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样 //连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
String[] split = server.split(":"); String[] split = server.split(":");
this.chatInfo = initServer(split[0], Integer.parseInt(split[1]), new MessageListener() { this.chatInfo = initServer(split[0], Integer.parseInt(split[1]), new MessageListener() {
@Override
public void onServerConnect() {
connectChatServer();
}
@Override @Override
public void onMessageListener(OriginalData data) { public void onMessageListener(OriginalData data) {
try { try {
Chat.ChatResponseMessage chatResponseMessage = Chat.ChatResponseMessage.parseFrom(data.getBodyBytes()); Chat.ChatResponseMessage chatResponseMessage = Chat.ChatResponseMessage.parseFrom(data.getBodyBytes());
if (chatResponseMessage.getHeader().getCode() == 0) {
int seq = chatResponseMessage.getHeader().getSeq(); int seq = chatResponseMessage.getHeader().getSeq();
if (seq > 0){ ResultEventCallback<Chat.ChatResponseMessage> callBack = callBackManager.getCallBack(seq);
ResultCallback<Chat.ChatResponseMessage> callBack = callBackManager.getCallBack(seq); if (callBack != null) {
if (callBack != null){ if (seq > 0) {
if (chatResponseMessage.getHeader().getCode() == 0) {
callBack.onSuccess(chatResponseMessage); callBack.onSuccess(chatResponseMessage);
} else {
callBack.onFailed(chatResponseMessage.getHeader().getCode());
}
if (!chatResponseMessage.hasPullOfflineMsgRes()) {
callBackManager.removeCallBack(seq); callBackManager.removeCallBack(seq);
} }
} else { //主动接受的消息
} }
else if (seq == 0) { //push消息
callBack.onSuccess(chatResponseMessage);
}
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -151,6 +167,7 @@ public class SocketManageer { ...@@ -151,6 +167,7 @@ public class SocketManageer {
public void onSocketConnectionSuccess(ConnectionInfo info, String action) { public void onSocketConnectionSuccess(ConnectionInfo info, String action) {
super.onSocketConnectionSuccess(info, action); super.onSocketConnectionSuccess(info, action);
logger.info("connect success"); logger.info("connect success");
messageListener.onServerConnect();
} }
...@@ -169,4 +186,50 @@ public class SocketManageer { ...@@ -169,4 +186,50 @@ public class SocketManageer {
return authInfo; return authInfo;
} }
public synchronized int sendRequest(Object request) {
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage.Builder builder = Chat.ChatRequestMessage.newBuilder();
builder.setHeader(header);
if (request instanceof Chat.PullContactsRequest){
builder.setPullContactsReq((Chat.PullContactsRequest)request);
}else if (request instanceof Chat.SearchRequest){
builder.setSearchReq((Chat.SearchRequest)request);
}else if (request instanceof Chat.AddContactRequest){
builder.setAddContactReq((Chat.AddContactRequest)request);
} else if (request instanceof Chat.ContactRequestsRequest){
builder.setContactRequestsReq((Chat.ContactRequestsRequest) request);
} else if(request instanceof Chat.CheckContactReqRequest){
builder.setCheckContactReqReq((Chat.CheckContactReqRequest) request);
} else if (request instanceof Chat.CreateContactGroupRequest){
builder.setCreateContactGroupReq((Chat.CreateContactGroupRequest) request);
} else if (request instanceof Chat.MoveContactGroupRequest){
builder.setMoveContactGroupReq((Chat.MoveContactGroupRequest) request);
} else if (request instanceof Chat.DeleteContactRequest){
builder.setDeleteContactReq((Chat.DeleteContactRequest) request);
} else if (request instanceof Chat.BlockContactRequest){
builder.setBlockContactReq((Chat.BlockContactRequest) request);
} else if (request instanceof Chat.ReportIllegalUserRequest){
builder.setReportIllegalUserReq((Chat.ReportIllegalUserRequest) request);
} else if (request instanceof Message.SendMessageRequest){
builder.setSendMsgReq((Message.SendMessageRequest) request);
} else if (request instanceof Message.SendGroupMessageRequest){
builder.setSendGroupMsgReq((Message.SendGroupMessageRequest) request);
} else if (request instanceof Message.SendChannelMessageRequest){
builder.setSendChannelMsgReq((Message.SendChannelMessageRequest) request);
} else if (request instanceof Push.PushPrivateMessageAckRequest){
builder.setPushPrivateMsgAckReq((Push.PushPrivateMessageAckRequest) request);
} else if (request instanceof Push.PushGroupMessageAckRequest){
builder.setPushGroupMsgAckReq((Push.PushGroupMessageAckRequest) request);
} else if (request instanceof Push.PushChannelMessageAckRequest){
builder.setPushChannelMsgAckReq((Push.PushChannelMessageAckRequest) request);
} else if (request instanceof Message.PullOfflineMessageRequest){
builder.setPullOfflineMsgReq((Message.PullOfflineMessageRequest) request);
}
OkSocket.open(getChatInfo())
.send(new IrequestData(builder.build().toByteArray()));
return id++;
}
} }
...@@ -7,7 +7,7 @@ import java.nio.ByteOrder; ...@@ -7,7 +7,7 @@ import java.nio.ByteOrder;
public class IrequestData implements ISendable { public class IrequestData implements ISendable {
private byte[] body; private final byte[] body;
public IrequestData(byte[] body){ public IrequestData(byte[] body){
this.body = body; this.body = body;
......
package com.ccwangluo.ccim.util;
import android.media.MediaRecorder;
import android.os.Build;
import java.io.File;
import java.io.IOException;
public class MediaHelper {
private MediaRecorder mMediaRecorder;
private String mPath;//文件夹
private String mFilePath;//文件
private static MediaHelper mInstance;
private MediaHelper(String path) {
mPath = path;
}
/**
* 准备播放后的回调
* 这个时候文件夹里已经有文件生成了
* 如果不去释放资源将会一直进行录音
*/
public interface MediaStateListener {
void preparedDone();
}
public MediaStateListener mMediaStateListener;
public void setMediaStateListener(MediaStateListener mediaStateListener) {
mMediaStateListener = mediaStateListener;
}
/**
* 单例模式获取 MediaHelper
* 双检锁/双重校验锁
*
* @param path
* @return
*/
public static MediaHelper getInstance(String path) {
if (mInstance == null) {
synchronized (MediaHelper.class) {
if (mInstance == null) {
mInstance = new MediaHelper(path);
}
}
}
return mInstance;
}
/**
* 准备录音
*/
public void prepare() {
try {
File fileDir = new File(mPath);
boolean b = !fileDir.exists();
if (b) {
fileDir.mkdirs();
}
String fileName = System.currentTimeMillis() + ".amr"; // 文件名字
File file = new File(fileDir, fileName); // 文件路径
mMediaRecorder = new MediaRecorder();
mFilePath = file.getAbsolutePath();
//设置保存文件的路径
if (Build.VERSION.SDK_INT < 26) {
//若api低于26,调用setOutputFile(String path)
mMediaRecorder.setOutputFile(file.getAbsolutePath());
} else {
//若API高于26 使用setOutputFile(File path)
mMediaRecorder.setOutputFile(new File(file.getAbsolutePath()));
}
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置MediaRecorder的音频源为麦克风
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); // 设置音频的格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置音频的编码为AMR_NB
mMediaRecorder.prepare();
mMediaRecorder.start();
if (mMediaStateListener != null) {
mMediaStateListener.preparedDone();
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
public void release() {
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
}
/**
* 取消
*/
public void cancel() {
release();
//删除相应的录音
if (mFilePath != null) {
File file = new File(mFilePath);
if (file.exists()) {
file.delete();
}
mFilePath = null;
}
}
//获取生成的文件路径
public String getFilePath() {
return mFilePath;
}
}
\ No newline at end of file
...@@ -133,6 +133,8 @@ message AddContactResponse { ...@@ -133,6 +133,8 @@ message AddContactResponse {
SUCCESS = 0; SUCCESS = 0;
ALREADY_SENT = 1; ALREADY_SENT = 1;
NO_AUTHORITY = 2; NO_AUTHORITY = 2;
ALREADY_CONTACT = 3;
ACCEPT_REQ = 4;
} }
AddResult result = 1; AddResult result = 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment