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
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