Commit 92ff0173 authored by sheteng's avatar sheteng

大多数的请求

parent 82ba9be3
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
......@@ -7,9 +7,9 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
import com.ccwangluo.ccim.CCClient;
import com.ccwangluo.ccim.listener.ResultCallback;
import com.ccwangluo.im.databinding.FragmentFirstBinding;
public class FirstFragment extends Fragment {
......@@ -33,7 +33,12 @@ public class FirstFragment extends Fragment {
binding.buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().login();
CCClient.getInstance().login("user1","123456",new ResultCallback<String>(){
@Override
public void onSuccess(String s) {
}
});
}
});
......@@ -50,6 +55,97 @@ public class FirstFragment extends Fragment {
CCClient.getInstance().getChatList();
}
});
binding.getOfflineMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().getOfflineMessage();
}
});
binding.searchUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().searchUser("user2");
}
});
binding.addUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().addContact(Long.parseLong(binding.userId.getText().toString()));
}
});
binding.sendTextMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().sendTextMessage("你好",Long.parseLong(binding.userId.getText().toString()));
}
});
binding.getContactRequests.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().getContactRequests();
}
});
binding.checkContactRequests.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().checkContactReq(Long.parseLong(binding.userId.getText().toString()),true);
}
});
binding.createContactGroupRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().createContactGroup("zhangsan");
}
});
binding.moveContactGroupRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().moveContactGroup(Long.parseLong(binding.groupId.getText().toString()),Long.parseLong(binding.userId.getText().toString()));
}
});
binding.deleteContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().deleteContact(Long.parseLong(binding.userId.getText().toString()));
}
});
binding.blockContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().blockContact(Long.parseLong(binding.userId.getText().toString()),true);
}
});
binding.reportIllegalUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().reportIllegalUser("搞黄色","搞黄色",Long.parseLong(binding.userId.getText().toString()));
}
});
binding.sendGroupMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().sendGroupMessage("搞黄色",Long.parseLong(binding.groupId.getText().toString()));
}
});
binding.sendChannelMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCClient.getInstance().sendChannelMessage("搞黄色",Long.parseLong(binding.channelId.getText().toString()));
}
});
}
@Override
......
......@@ -3,10 +3,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:orientation="horizontal"
android:layout_height="match_parent"
tools:context=".FirstFragment">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:orientation="vertical"
android:layout_height="match_parent">
<Button
android:layout_marginTop="50dp"
......@@ -17,7 +21,7 @@
android:text="login" />
<Button
android:layout_marginTop="50dp"
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/connectChatServer"
android:layout_width="wrap_content"
......@@ -25,11 +29,144 @@
android:text="connectChatServer" />
<Button
android:layout_marginTop="50dp"
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/getChatList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="getChatList" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/getOfflineMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="getOfflineMessage" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/searchUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="searchUser" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/addUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="addUser" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/getContactRequests"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="getContactRequests" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/checkContactRequests"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="checkContactRequests" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/sendTextMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sendTextMessage" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/createContactGroupRequest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="createContactGroup" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:orientation="vertical"
android:layout_height="match_parent">
<EditText
android:id="@+id/userId"
android:layout_width="match_parent"
android:text="2"
android:hint="userId"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/groupId"
android:layout_width="match_parent"
android:hint="groupId"
android:text="1"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/channelId"
android:text="1"
android:layout_width="match_parent"
android:hint="channelId"
android:layout_height="wrap_content"/>
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/moveContactGroupRequest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="moveContactGroup" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/deleteContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="deleteContact" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/blockContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="blockContact" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/reportIllegalUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="reportIllegalUser" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/sendGroupMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sendGroupMessage" />
<Button
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/sendChannelMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sendChannelMessage" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
......@@ -4,28 +4,27 @@ package com.ccwangluo.ccim;
import android.app.Activity;
import android.text.TextUtils;
import com.xuhao.didi.core.pojo.OriginalData;
import com.ccwangluo.ccim.listener.ResultCallback;
import com.ccwangluo.ccim.manage.CallBackManager;
import com.ccwangluo.ccim.manage.SocketManageer;
import com.ccwangluo.ccim.modle.IrequestData;
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.OkSocketOptions;
import com.xuhao.didi.socket.client.sdk.client.action.SocketActionAdapter;
import com.xuhao.didi.socket.client.sdk.client.connection.IConnectionManager;
import java.util.logging.Logger;
import ccim.protocol.Auth;
import ccim.protocol.Chat;
import ccim.protocol.Common;
import ccim.protocol.Message;
import ccim.protocol.MessageSpec;
public class CCClient {
private ConnectionInfo authInfo;
private ConnectionInfo chatInfo;
private Logger logger = Logger.getLogger(CCClient.class.getName());
private final int version = 1;
private String token = "";
private volatile int id = 0;
private volatile int id = 1;
private SocketManageer socketManageer;
private CallBackManager<Chat.ChatResponseMessage> callBackManager;
private CCClient() {
}
......@@ -44,143 +43,375 @@ public class CCClient {
}
public void init(Activity activity) {
initAuth();
}
private void initChat() {
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
chatInfo = new ConnectionInfo("117.144.156.2", 8000);
//调用OkSocket,开启这次连接的通道,拿到通道Manager
IConnectionManager manager = OkSocket.open(chatInfo);
//获得当前连接通道的参配对象
OkSocketOptions options = manager.getOption();
//基于当前参配对象构建一个参配建造者类
OkSocketOptions.Builder builder = new OkSocketOptions.Builder(options);
//修改参配设置(其他参配请参阅类文档)
// builder.setSinglePackageBytes(size);
//建造一个新的参配对象并且付给通道
manager.option(builder.build());
//调用通道进行连接
manager.connect();
//设置自定义解析头
OkSocketOptions.Builder okOptionsBuilder = new OkSocketOptions.Builder();
okOptionsBuilder.setReaderProtocol(new MyIReaderProtocol());
//将新的修改后的参配设置给连接管理器
manager.option(okOptionsBuilder.build());
manager.registerReceiver(new SocketActionAdapter() {
callBackManager = new CallBackManager<Chat.ChatResponseMessage>();
socketManageer = new SocketManageer(callBackManager);
socketManageer.initAuth();
}
// public void registerMessageListener()
public void login(String username, String password, ResultCallback<String> resultCallback) {
socketManageer.login(username, password, resultCallback);
}
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
public void onSocketConnectionSuccess(ConnectionInfo info, String action) {
super.onSocketConnectionSuccess(info, action);
logger.info("chat connect success");
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasConnectRes()) {
logger.info("chat connect success");
}
}
});
id++;
}
/**
* 获取联系人列表
*/
public void getChatList() {
Chat.PullContactsRequest builder = Chat.PullContactsRequest.newBuilder()
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder().setPullContactsReq(builder).setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) {
super.onSocketReadResponse(info, action, data);
try {
Chat.ChatRequestMessage chatRequestMessage = Chat.ChatRequestMessage.parseFrom(data.getBodyBytes());
logger.info(String.valueOf(chatRequestMessage));
} catch (Exception e) {
e.printStackTrace();
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasPullContactsRes()) {
logger.info(String.valueOf(chatResponseMessage.getPullContactsRes()));
}
}
});
id++;
}
/**
* 同步离线消息
*/
public void getOfflineMessage() {
Message.PullOfflineMessageRequest offlineMessageRequest = Message.PullOfflineMessageRequest.newBuilder().build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setPullOfflineMsgReq(offlineMessageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasPullOfflineMsgRes()) {
logger.info(String.valueOf(chatResponseMessage.getPullOfflineMsgRes()));
}
}
});
id++;
}
private void initAuth() {
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
authInfo = new ConnectionInfo("117.144.156.2", 9000);
//调用OkSocket,开启这次连接的通道,拿到通道Manager
IConnectionManager manager = OkSocket.open(authInfo);
//获得当前连接通道的参配对象
OkSocketOptions options = manager.getOption();
//基于当前参配对象构建一个参配建造者类
OkSocketOptions.Builder builder = new OkSocketOptions.Builder(options);
//修改参配设置(其他参配请参阅类文档)
// builder.setSinglePackageBytes(size);
//建造一个新的参配对象并且付给通道
manager.option(builder.build());
//调用通道进行连接
manager.connect();
//设置自定义解析头
OkSocketOptions.Builder okOptionsBuilder = new OkSocketOptions.Builder();
okOptionsBuilder.setReaderProtocol(new MyIReaderProtocol());
//将新的修改后的参配设置给连接管理器
manager.option(okOptionsBuilder.build());
manager.registerReceiver(new SocketActionAdapter() {
/**
* 搜索好友
*/
public void searchUser(String userName) {
Chat.SearchRequest searchRequest = Chat.SearchRequest.newBuilder().setUsername(userName).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setSearchReq(searchRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSocketConnectionSuccess(ConnectionInfo info, String action) {
super.onSocketConnectionSuccess(info, action);
logger.info("auth connect success");
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSearchRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
/**
* 添加好友
*/
public void addContact(Long userId) {
Chat.AddContactRequest addContactRequest = Chat.AddContactRequest.newBuilder().setUserId(userId).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setAddContactReq(addContactRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasAddContactRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
/**
* 联系人申请列表
*/
public void getContactRequests() {
Chat.ContactRequestsRequest contactRequestsRequest = Chat.ContactRequestsRequest.newBuilder().build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setContactRequestsReq(contactRequestsRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) {
super.onSocketDisconnection(info, action, e);
logger.info("auth connect success");
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasContactRequestsRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
/**
* 验证联系人申请
*/
public void checkContactReq(Long reqUserId,boolean accept) {
Chat.CheckContactReqRequest checkContactReqRequest = Chat.CheckContactReqRequest.newBuilder()
.setReqUserId(reqUserId)
.setAccept(accept)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setCheckContactReqReq(checkContactReqRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) {
super.onSocketReadResponse(info, action, data);
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasCheckContactReqRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
try {
Auth.AuthResponseMessage chatResponseMessage = Auth.AuthResponseMessage.parseFrom(data.getBodyBytes());
/**
* 创建联系人群组
*/
public void createContactGroup(String name) {
Chat.CreateContactGroupRequest createContactGroupRequest = Chat.CreateContactGroupRequest.newBuilder()
.setName(name)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setCreateContactGroupReq(createContactGroupRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasCreateContactGroupRes()) {
logger.info(String.valueOf(chatResponseMessage));
token = chatResponseMessage.getLoginRes().getToken();
initChat();
manager.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
});
id++;
}
/**
* 移动联系人所在的群组
*/
public void moveContactGroup(Long groupId,Long userId) {
Chat.MoveContactGroupRequest moveContactGroupRequest = Chat.MoveContactGroupRequest.newBuilder()
.setContactGroupId(groupId)
.setContactUserId(userId)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setMoveContactGroupReq(moveContactGroupRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasMoveContactGroupRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
/**
* 删除联系人
*/
public void deleteContact(Long userId) {
Chat.DeleteContactRequest deleteContactRequest = Chat.DeleteContactRequest.newBuilder()
.setContactUserId(userId)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setDeleteContactReq(deleteContactRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasDeleteContactRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
public void login() {
Auth.LoginRequest.Builder builder = Auth.LoginRequest.newBuilder().setUsername("user1").setPassword("123456").setAppId(1);
Auth.AuthRequestMessage build = Auth.AuthRequestMessage.newBuilder().setLoginReq(builder.build()).build();
OkSocket.open(authInfo)
/**
* 拉黑联系人
*/
public void blockContact(Long userId,Boolean mute) {
Chat.BlockContactRequest blockContactRequest = Chat.BlockContactRequest.newBuilder()
.setContactUserId(userId)
.setMute(mute)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setBlockContactReq(blockContactRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasBlockContactRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
/**
* 举报违规用户
*/
public void reportIllegalUser(String title,String content,Long userId) {
Chat.ReportIllegalUserRequest reportIllegalUserRequest = Chat.ReportIllegalUserRequest.newBuilder()
.setContent(content)
.setIllegalUserId(userId)
.setTitle(title)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(version).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setReportIllegalUserReq(reportIllegalUserRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasReportIllegalUserRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
public void connectChatServer(){
if (TextUtils.isEmpty(token)){
return;
}
Chat.ConnectRequest builder = Chat.ConnectRequest.newBuilder().setToken(token).build();
/**
* 发送消息
*/
public void sendTextMessage(String content, Long reciveUserId) {
Message.SendMessageRequest messageRequest = Message.SendMessageRequest.newBuilder()
.setContent(content)
.setMsgType(MessageSpec.MessageType.TEXT)
.setReceiverUserId(reciveUserId).build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder().setConnectReq(builder).setHeader(header).build();
OkSocket.open(chatInfo)
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setSendMsgReq(messageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSendMsgRes()) {
logger.info(String.valueOf(chatResponseMessage.getSearchRes()));
}
}
});
id++;
}
public void getChatList(){
if (TextUtils.isEmpty(token)){
return;
}
Chat.PullContactsRequest builder = Chat.PullContactsRequest.newBuilder()
/**
* 发送群组消息
*/
public void sendGroupMessage(String content, Long groupId) {
Message.SendGroupMessageRequest sendGroupMessageRequest = Message.SendGroupMessageRequest.newBuilder()
.setContent(content)
.setMsgType(MessageSpec.MessageType.TEXT)
.setGroupId(groupId)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder().setPullContactsReq(builder).setHeader(header).build();
OkSocket.open(chatInfo)
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setSendGroupMsgReq(sendGroupMessageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSendGroupMsgRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
/**
* 发送群组消息
*/
public void sendChannelMessage(String content, Long channelId) {
Message.SendChannelMessageRequest sendChannelMessageRequest = Message.SendChannelMessageRequest.newBuilder()
.setContent(content)
.setMsgType(MessageSpec.MessageType.TEXT)
.setChannelId(channelId)
.build();
Common.RequestMessageHeader header = Common.RequestMessageHeader.newBuilder().setVersion(1).setSeq(id).build();
Chat.ChatRequestMessage build = Chat.ChatRequestMessage.newBuilder()
.setSendChannelMsgReq(sendChannelMessageRequest)
.setHeader(header).build();
OkSocket.open(socketManageer.getChatInfo())
.send(new IrequestData(build.toByteArray()));
callBackManager.addCallBack(id, new ResultCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasSendChannelMsgRes()) {
logger.info(String.valueOf(chatResponseMessage));
}
}
});
id++;
}
}
package com.ccwangluo.ccim.listener;
import ccim.protocol.Chat;
import ccim.protocol.Push;
public interface MessageEventCallback {
// void onRecvMessage(Push)
}
package com.ccwangluo.ccim.listener;
import com.xuhao.didi.core.pojo.OriginalData;
public interface MessageListener {
void onMessageListener(OriginalData data);
}
package com.ccwangluo.ccim.listener;
public interface ResultCallback<T> {
void onSuccess(T t);
}
package com.ccwangluo.ccim.manage;
import com.ccwangluo.ccim.listener.ResultCallback;
import java.util.HashMap;
public class CallBackManager<T> {
private HashMap<Integer, ResultCallback<T>> callbackHashMap = new HashMap<>();
public void addCallBack(int id, ResultCallback<T> resultCallback) {
callbackHashMap.put(id, resultCallback);
}
public ResultCallback<T> getCallBack(int id) {
return callbackHashMap.get(id);
}
public void removeCallBack(int id) {
callbackHashMap.remove(id);
}
}
package com.ccwangluo.ccim.manage;
import com.ccwangluo.ccim.CCClient;
import com.ccwangluo.ccim.modle.IrequestData;
import com.ccwangluo.ccim.modle.MyIReaderProtocol;
import com.ccwangluo.ccim.listener.MessageListener;
import com.ccwangluo.ccim.listener.ResultCallback;
import com.google.protobuf.InvalidProtocolBufferException;
import com.xuhao.didi.core.pojo.OriginalData;
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.OkSocketOptions;
import com.xuhao.didi.socket.client.sdk.client.action.SocketActionAdapter;
import com.xuhao.didi.socket.client.sdk.client.connection.IConnectionManager;
import java.util.logging.Logger;
import ccim.protocol.Auth;
import ccim.protocol.Chat;
public class SocketManageer {
private Logger logger = Logger.getLogger(CCClient.class.getName());
private CallBackManager<Chat.ChatResponseMessage> callBackManager;
public SocketManageer(CallBackManager<Chat.ChatResponseMessage> callBackManager) {
this.callBackManager = callBackManager;
}
private ConnectionInfo authInfo;
private ConnectionInfo chatInfo;
private String token;
private ResultCallback<String> loginCallBack;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Logger getLogger() {
return logger;
}
public void setLogger(Logger logger) {
this.logger = logger;
}
public ConnectionInfo getAuthInfo() {
return authInfo;
}
public void setAuthInfo(ConnectionInfo authInfo) {
this.authInfo = authInfo;
}
public ConnectionInfo getChatInfo() {
return chatInfo;
}
public void setChatInfo(ConnectionInfo chatInfo) {
this.chatInfo = chatInfo;
}
public void initAuth() {
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
this.authInfo = initServer("117.144.156.2", 9000, new MessageListener() {
@Override
public void onMessageListener(OriginalData data) {
try {
Auth.AuthResponseMessage chatResponseMessage = Auth.AuthResponseMessage.parseFrom(data.getBodyBytes());
logger.info(String.valueOf(chatResponseMessage));
if (chatResponseMessage.getHeader().getCode() == 0) {
token = chatResponseMessage.getLoginRes().getToken();
String server = chatResponseMessage.getLoginRes().getServer();
initChat(server);
OkSocket.open(authInfo).disconnect();
if (loginCallBack != null){
loginCallBack.onSuccess(token);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void login(String username, String password, ResultCallback<String> resultCallback) {
Auth.LoginRequest.Builder builder = Auth.LoginRequest.newBuilder().setUsername("user1").setPassword("123456").setAppId(1);
Auth.AuthRequestMessage build = Auth.AuthRequestMessage.newBuilder().setLoginReq(builder.build()).build();
OkSocket.open(getAuthInfo())
.send(new IrequestData(build.toByteArray()));
this.loginCallBack = resultCallback;
}
private void initChat(String server) {
//连接参数设置(IP,端口号),这也是一个连接的唯一标识,不同连接,该参数中的两个值至少有其一不一样
String[] split = server.split(":");
this.chatInfo = initServer(split[0], Integer.parseInt(split[1]), new MessageListener() {
@Override
public void onMessageListener(OriginalData data) {
try {
Chat.ChatResponseMessage chatResponseMessage = Chat.ChatResponseMessage.parseFrom(data.getBodyBytes());
if (chatResponseMessage.getHeader().getCode() == 0) {
int seq = chatResponseMessage.getHeader().getSeq();
if (seq > 0){
ResultCallback<Chat.ChatResponseMessage> callBack = callBackManager.getCallBack(seq);
if (callBack != null){
callBack.onSuccess(chatResponseMessage);
callBackManager.removeCallBack(seq);
}
} else { //主动接受的消息
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private ConnectionInfo initServer(String ip, int port, MessageListener messageListener) {
ConnectionInfo authInfo = new ConnectionInfo(ip, port);
//调用OkSocket,开启这次连接的通道,拿到通道Manager
IConnectionManager manager = OkSocket.open(authInfo);
//获得当前连接通道的参配对象
OkSocketOptions options = manager.getOption();
//基于当前参配对象构建一个参配建造者类
OkSocketOptions.Builder builder = new OkSocketOptions.Builder(options);
//修改参配设置(其他参配请参阅类文档)
// builder.setSinglePackageBytes(size);
//建造一个新的参配对象并且付给通道
manager.option(builder.build());
//调用通道进行连接
manager.connect();
//设置自定义解析头
OkSocketOptions.Builder okOptionsBuilder = new OkSocketOptions.Builder();
okOptionsBuilder.setReaderProtocol(new MyIReaderProtocol());
//将新的修改后的参配设置给连接管理器
manager.option(okOptionsBuilder.build());
manager.registerReceiver(new SocketActionAdapter() {
@Override
public void onSocketConnectionSuccess(ConnectionInfo info, String action) {
super.onSocketConnectionSuccess(info, action);
logger.info("connect success");
}
@Override
public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) {
super.onSocketDisconnection(info, action, e);
logger.info("disconnect success");
}
@Override
public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) {
super.onSocketReadResponse(info, action, data);
messageListener.onMessageListener(data);
}
});
return authInfo;
}
}
package com.ccwangluo.ccim;
package com.ccwangluo.ccim.modle;
import com.xuhao.didi.core.iocore.interfaces.ISendable;
......
package com.ccwangluo.ccim;
package com.ccwangluo.ccim.modle;
import com.xuhao.didi.core.protocol.IReaderProtocol;
import java.nio.ByteOrder;
class MyIReaderProtocol implements IReaderProtocol {
public class MyIReaderProtocol implements IReaderProtocol {
@Override
public int getHeaderLength() {
return 4;
......
......@@ -61,26 +61,32 @@ message ConnectRequest {
}
message ConnectResponse {
bool connected = 1;
bool connected = 1; //是否连接成功
}
message PullContactsRequest {}
message PullContactsResponse {
message ContactGroup {
int64 group_id = 1;
string name = 2;
int64 group_id = 1; // 群组id
string name = 2; // 群组名称
}
message Contact {
int64 app_id = 1;
enum Status {
NORMAL = 0; // 正常
MUTED = 1; // 拒绝接收消息
BLACK_LIST = 2; // 黑名单
}
int64 app_id = 1; // 应用id
int64 user_id = 2;
int64 contact_user_id = 3;
string contact_user_name = 4;
int64 contact_group_id = 5;
int64 private_id = 6;
int64 read_msg_id = 7;
int32 status = 8;
string ext_data = 9;
int64 contact_user_id = 3; // 联系人用户id
string contact_user_name = 4; // 联系人用户名字
int64 contact_group_id = 5; // 联系人群组id
int64 private_id = 6; // 私聊对话id
int64 read_msg_id = 7; // 已读消息id
Status status = 8; // 联系人状态
string ext_data = 9; // 扩展数据
}
message Group {
int64 group_id = 1;
......@@ -100,10 +106,10 @@ message PullContactsResponse {
string name = 6;
string ext_data = 7;
}
repeated ContactGroup contact_groups = 2;
repeated Contact contacts = 3;
repeated Group groups = 4;
repeated Channel channels = 5;
repeated ContactGroup contact_groups = 2; // 联系人群组列表
repeated Contact contacts = 3; // 联系人列表
repeated Group groups = 4; // 群组
repeated Channel channels = 5; // 频道
}
message SearchRequest {
......@@ -135,7 +141,7 @@ message ContactRequestsRequest {}
message ContactRequestsResponse {
message ContactRequest {
int64 req_id = 1;
int64 user_id = 1;
string username = 2;
}
repeated ContactRequest requests = 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