package com.xuhao.didi.oksocket;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.xuhao.didi.core.iocore.interfaces.IPulseSendable;
import com.xuhao.didi.core.iocore.interfaces.ISendable;
import com.xuhao.didi.core.pojo.OriginalData;
import com.xuhao.didi.oksocket.adapter.LogAdapter;
import com.xuhao.didi.oksocket.btnview.Ripple;
import com.xuhao.didi.oksocket.data.DefaultSendBean;
import com.xuhao.didi.oksocket.data.HandShakeBean;
import com.xuhao.didi.oksocket.data.LogBean;
import com.xuhao.didi.oksocket.data.PulseBean;
import com.xuhao.didi.socket.client.impl.client.action.ActionDispatcher;
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 com.xuhao.didi.socket.client.sdk.client.connection.NoneReconnect;
import com.xuhao.didi.socket.common.interfaces.utils.TextUtils;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.agp.utils.TextTool;
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner;
import ohos.miscservices.pasteboard.PasteData;
import ohos.miscservices.pasteboard.SystemPasteboard;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
public class ComplexDemo extends Ability implements AbsButton.CheckedStateChangedListener,
Component.ClickedListener, Component.FocusChangedListener {
private ConnectionInfo mInfo;
private Ripple mConnect;
private IConnectionManager mManager;
private TextField mIpEt;
private TextField mPortEt;
private Ripple mRedirect;
private TextField mFrequencyEt;
private Ripple mSetFrequency;
private Ripple mMenualPulse;
private Ripple mClearLog;
private Checkbox mReconnectSwitch;
private ListContainer mSendList;
private ListContainer mReceList;
private Text mPortHint;
private Text mPortText;
private Text mEditHint;
private Text mIpText;
private Text mPulseHint;
private Text mPulseText;
private LogAdapter mSendLogAdapter;
private LogAdapter mReceLogAdapter;
private String mSelectColor = "#169E93";
private String mColorUn = "#7A7A7A";
private int maxsize = 15;
private int mSize = 11;
private TextUtile textUtils;
private SocketActionAdapter adapter = new SocketActionAdapter() {
@Override
public void onSocketConnectionSuccess(ConnectionInfo info, String action) {
logRece("连接成功(Connecting Successful)");
mManager.send(new HandShakeBean());
mConnect.setText("DisConnect");
initSwitch();
mManager.getPulseManager().setPulseSendable(new PulseBean());
mIpEt.setEnabled(true);
mPortEt.setEnabled(true);
textUtils.chickTextColor(ComplexDemo.this,mIpEt,mPortEt);
}
private void initSwitch() {
OkSocketOptions okSocketOptions = mManager.getOption();
mReconnectSwitch.setChecked(!(okSocketOptions.getReconnectionManager() instanceof NoneReconnect));
}
@Override
public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) {
if (e != null) {
if (e instanceof RedirectException) {
logSend("正在重定向连接(Redirect Connecting)...");
mManager.switchConnectionInfo(((RedirectException) e).redirectInfo);
mManager.connect();
mIpEt.setEnabled(true);
mPortEt.setEnabled(true);
textUtils.chickTextColor(ComplexDemo.this,mIpEt,mPortEt);
} else {
logSend("异常断开(Disconnected with exception):" + e.getMessage());
mIpEt.setEnabled(false);
mPortEt.setEnabled(false);
textUtils.textInfo(mIpEt,mIpText,maxsize);
textUtils.textInfo(mPortEt,mPulseText,maxsize);
textUtils.chickColor(ComplexDemo.this,mIpEt,mPortEt);
}
} else {
logSend("正常断开(Disconnect Manually)");
mIpEt.setEnabled(false);
mPortEt.setEnabled(false);
textUtils.textInfo(mIpEt,mIpText,maxsize);
textUtils.textInfo(mPortEt,mPulseText,maxsize);
textUtils.chickColor(ComplexDemo.this,mIpEt,mPortEt);
}
mConnect.setText("Connect");
}
@Override
public void onSocketConnectionFailed(ConnectionInfo info, String action, Exception e) {
logSend("连接失败(Connecting Failed)");
mConnect.setText("Connect");
mIpEt.setEnabled(false);
mPortEt.setEnabled(false);
textUtils.textInfo(mIpEt,mIpText,maxsize);
textUtils.textInfo(mPortEt,mPulseText,maxsize);
textUtils.chickColor(ComplexDemo.this,mIpEt,mPortEt);
}
@Override
public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) {
String str = new String(data.getBodyBytes(), Charset.forName("utf-8"));
JsonObject jsonObject = new JsonParser().parse(str).getAsJsonObject();
int cmd = jsonObject.get("cmd").getAsInt();
if (cmd == 54) { // 登陆成功
String handshake = jsonObject.get("handshake").getAsString();
logRece("握手成功! 握手信息(Handshake Success):" + handshake + ". 开始心跳(Start Heartbeat)..");
} else if (cmd == 57) { // 切换,重定向.(暂时无法演示,如有疑问请咨询github)
String ip = jsonObject.get("data").getAsString().split(":")[0];
int port = Integer.parseInt(jsonObject.get("data").getAsString().split(":")[1]);
ConnectionInfo redirectInfo = new ConnectionInfo(ip, port);
redirectInfo.setBackupInfo(mInfo.getBackupInfo());
mManager.getReconnectionManager().addIgnoreException(RedirectException.class);
mManager.disconnect(new RedirectException(redirectInfo));
} else if (cmd == 14) { // 心跳
logRece("收到心跳,喂狗成功(Heartbeat Received,Feed the Dog)");
mManager.getPulseManager().feed();
} else {
logRece(str);
}
}
@Override
public void onSocketWriteResponse(ConnectionInfo info, String action, ISendable data) {
byte[] bytes = data.parse();
bytes = Arrays.copyOfRange(bytes, 4, bytes.length);
String str = new String(bytes, Charset.forName("utf-8"));
JsonObject jsonObject = new JsonParser().parse(str).getAsJsonObject();
int cmd = jsonObject.get("cmd").getAsInt();
switch (cmd) {
case 54: {
String handshake = jsonObject.get("handshake").getAsString();
logSend("发送握手数据(Handshake Sending):" + handshake);
mManager.getPulseManager().pulse();
break;
}
default:
logSend(str);
}
}
@Override
public void onPulseSend(ConnectionInfo info, IPulseSendable data) {
byte[] bytes = data.parse();
bytes = Arrays.copyOfRange(bytes, 4, bytes.length);
String str = new Stri
没有合适的资源?快使用搜索试试~ 我知道了~
一款基于Tcp协议的Socket通讯(长连接)
共155个文件
java:108个
xml:17个
gradle:7个
0 下载量 105 浏览量
2023-08-05
09:18:13
上传
评论
收藏 904KB ZIP 举报
温馨提示
一款基于Tcp协议的Socket通讯(长连接)
资源推荐
资源详情
资源评论
收起资源包目录
一款基于Tcp协议的Socket通讯(长连接) (155个子文件)
gradlew.bat 3KB
oksocketr.gif 705KB
.gitignore 222B
.gitignore 7B
.gitignore 7B
.gitignore 7B
.gitignore 7B
.gitignore 7B
build.gradle 819B
build.gradle 677B
build.gradle 259B
build.gradle 215B
build.gradle 203B
build.gradle 160B
settings.gradle 95B
gradlew 6KB
com.xuhao.didi.socket.common.interfaces.common_interfacies.server.IServerManager 51B
gradle-wrapper.jar 57KB
ComplexDemo.java 21KB
ConnectionManagerImpl.java 16KB
SimpleDemo.java 13KB
ServerAdmin.java 12KB
ActionDispatcher.java 12KB
MainAbility.java 12KB
OkSocketOptions.java 11KB
TextUtile.java 8KB
ServerActionDispatcher.java 7KB
ReaderImpl.java 7KB
RBaseHelper.java 7KB
ServerManagerImpl.java 7KB
DefaultReconnectManager.java 6KB
ClientImpl.java 6KB
OkServerOptions.java 5KB
TypedAttrUtils.java 5KB
IOThreadManager.java 5KB
ManagerHolder.java 4KB
PulseManager.java 4KB
ClientActionDispatcher.java 4KB
RippleHelper.java 4KB
ClientIOManager.java 4KB
WriterImpl.java 4KB
AbsConnectionManager.java 4KB
AttrUtils.java 3KB
AbsReconnectionManager.java 3KB
OkSocket.java 3KB
AbsClient.java 3KB
SocketActionAdapter.java 3KB
ISocketActionListener.java 3KB
FilmHelper.java 3KB
AbsLoopThread.java 3KB
OkSocketSSLConfig.java 2KB
ExampleOhosTest.java 2KB
ActionHandler.java 2KB
IConnectionManager.java 2KB
DensityUtils.java 2KB
AbsClientPool.java 2KB
SimplexIOThread.java 2KB
ConnectionInfo.java 2KB
ClientPoolImpl.java 2KB
IllegalAccessException.java 2KB
Ripple.java 2KB
ClipPathManager.java 2KB
LogAdapter.java 2KB
AbsServerRegisterProxy.java 2KB
DuplexWriteThread.java 2KB
ClientWriteThread.java 2KB
ClientReadThread.java 1KB
DuplexReadThread.java 1KB
IClient.java 1KB
UnConnectException.java 1KB
DogDeadException.java 1KB
IServerActionListener.java 1KB
CacheException.java 1KB
IAction.java 1KB
ReadException.java 1KB
AbsReader.java 1KB
WriteException.java 1KB
ServerActionAdapter.java 1009B
Film.java 1004B
IAction.java 990B
IReaderProtocol.java 967B
OriginalData.java 940B
SLog.java 887B
LogUtil.java 856B
IIOCoreOptions.java 853B
PulseBean.java 792B
RHelper.java 786B
ManuallyDisconnectException.java 772B
SPIUtils.java 770B
IWriter.java 768B
DefaultSendBean.java 767B
MsgDataBean.java 755B
ThreadUtils.java 752B
IIOManager.java 702B
BytesUtils.java 699B
IClientIOCallback.java 691B
DefaultX509ProtocolTrustManager.java 686B
IReader.java 625B
IConfiguration.java 618B
DefaultNormalReaderProtocol.java 614B
共 155 条
- 1
- 2
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6822
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功