android - 维护多个套接字连接聊天应用程序
问题描述
我正在构建一个 IRC 客户端,它是一个基于 IRC 协议的聊天应用程序。在我的应用程序中,我需要创建一个套接字并与服务器建立连接(即:freenode.net) 在这个服务器中有多个通道,并且我有这些通道的列表视图。当我单击一个频道项目时,我想通过调用新的 ConnectTask() 并创建一个新活动然后开始聊天来连接到该频道。但是,当我返回列表视图并再次单击频道时,我想恢复之前在 ConnectTask() 上的聊天内容,此外,我还想连接到其他频道并保持状态当我暂时“离开”频道时。我将如何实现这一目标?我应该为每个频道打开一个新活动吗?还是片段?我应该使用线程还是其他东西?非常感谢!
连接.java
public void start() throws IOException {
running = true;
Socket socket = new Socket(host, port);
try {
out = new PrintWriter(new BufferedWriter
(new OutputStreamWriter
(socket.getOutputStream())),
true);
in = new BufferedReader(new InputStreamReader
(socket.getInputStream()));
send("NICK " + nick);
send("USER " + username + " 0 * :" + realname);
send("JOIN " + channel);
while (running) {
String message = in.readLine();
if (message != null)
listener.rcv(message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
out.flush();
out.close();
in.close();
socket.close();
}
}
SingleChannelActivity 中的 ConnectTask()。
private class ConnectTask extends AsyncTask<String, String, Connection> {
@Override
protected Connection doInBackground(String... params) {
connection = new Connection(params[0],
Integer.parseInt(params[1]),
params[2],
params[3]
,
new Connection.MessageCallback() {
@Override
public void rcv(String message) {
publishProgress(message);
}
});
try {
connection.start();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
parseSrv(values[0]);
}
}
我在通道项启动的活动打开时调用它
new ConnectTask().execute("irc.freenode.net", "6667", nick, channel);
解决方案
推荐阅读
- javascript - 为什么 file_put_contents 在我的在线 php 脚本中不起作用?
- kubernetes-helm - Helm 升级命令无故失败
- amazon-web-services - 在 onUpdate 或 onDelete 中引用 AwsCustomResource 中的物理资源 ID
- java - 使用Tomcat部署的应用程序,在某个时间点停止并且用户无法登录
- google-cloud-platform - 如何将 .csv 文件读入 GCP 数据流,然后获取特定列的计数并将其写入 BigQuery?
- python - 如何修复“discord.ext.commands.errors.MissingRequiredArgument:ctx 是缺少的必需参数。” 在不和谐.py
- c - 为什么我的 read() 系统调用返回 -1?
- regex - Detecting Special Characters with Regular Expression in python?
- sql - ORA:01467 排序键太长
- c# - 如何存储 Windows 服务的可更改设置?