feat: phone session list + event log connect real server via ServerClient
This commit is contained in:
@@ -6,15 +6,71 @@ import android.widget.ListView;
|
|||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 事件流(接入真实 onEvent)。
|
||||||
|
* 空壳阶段先演示:连接后把收到的 event 原样追加到列表。
|
||||||
|
*/
|
||||||
public class EventLogActivity extends AppCompatActivity {
|
public class EventLogActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private final String[] events = { "(空壳) 事件流待接入", "onStatus / onEvent -> watch" };
|
private ArrayAdapter<String> adapter;
|
||||||
|
private ServerClient client;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_event_log);
|
setContentView(R.layout.activity_event_log);
|
||||||
|
|
||||||
ListView list = findViewById(R.id.event_list);
|
ListView list = findViewById(R.id.event_list);
|
||||||
list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, events));
|
List<String> data = new ArrayList<>();
|
||||||
|
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);
|
||||||
|
list.setAdapter(adapter);
|
||||||
|
|
||||||
|
client = new ServerClient(new ServerClient.Listener() {
|
||||||
|
@Override
|
||||||
|
public void onConnectionChanged(boolean connected) {
|
||||||
|
runOnUiThread(() -> adapter.add(connected ? "[已连接]" : "[连接断开]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onHello(JSONObject hello) {
|
||||||
|
// nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatus(JSONObject status) {
|
||||||
|
runOnUiThread(() -> adapter.add("[status] " + status.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(JSONObject event) {
|
||||||
|
runOnUiThread(() -> {
|
||||||
|
adapter.add(event.toString());
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(String requestId, boolean ok, JSONObject result, JSONObject error) {
|
||||||
|
runOnUiThread(() -> adapter.add("[response] " + (ok ? "ok" : (error != null ? error.optString("message") : "err"))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(String message) {
|
||||||
|
runOnUiThread(() -> adapter.add("[error] " + message));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
client.connect("ws://10.0.2.2:8787/ws", "dshwatch", "change-me");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (client != null) client.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,15 +6,90 @@ import android.widget.ListView;
|
|||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会话列表(接入真实 session.list)。
|
||||||
|
* 空壳阶段先用一个独立 ServerClient 连接演示;后续统一走 DshApp 共享连接。
|
||||||
|
*/
|
||||||
public class SessionListActivity extends AppCompatActivity {
|
public class SessionListActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private final String[] sessions = { "会话 demo-1", "会话 demo-2", "会话 demo-3", "(空壳列表)" };
|
private ArrayAdapter<String> adapter;
|
||||||
|
private ServerClient client;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_session_list);
|
setContentView(R.layout.activity_session_list);
|
||||||
|
|
||||||
ListView list = findViewById(R.id.session_list);
|
ListView list = findViewById(R.id.session_list);
|
||||||
list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, sessions));
|
List<String> data = new ArrayList<>();
|
||||||
|
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);
|
||||||
|
list.setAdapter(adapter);
|
||||||
|
|
||||||
|
client = new ServerClient(new ServerClient.Listener() {
|
||||||
|
@Override
|
||||||
|
public void onConnectionChanged(boolean connected) {
|
||||||
|
runOnUiThread(() -> adapter.add(connected ? "[已连接]" : "[连接断开]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onHello(JSONObject hello) {
|
||||||
|
client.sendRequest("session.list", new JSONObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatus(JSONObject status) {
|
||||||
|
runOnUiThread(() -> adapter.add("[status] " + status.optString("model")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(JSONObject event) {
|
||||||
|
// ignore here
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(String requestId, boolean ok, JSONObject result, JSONObject error) {
|
||||||
|
runOnUiThread(() -> {
|
||||||
|
if (ok && result != null) {
|
||||||
|
JSONArray items = result.optJSONArray("items");
|
||||||
|
if (items != null) {
|
||||||
|
adapter.clear();
|
||||||
|
for (int i = 0; i < items.length(); i++) {
|
||||||
|
JSONObject item = items.optJSONObject(i);
|
||||||
|
String id = item != null ? item.optString("sessionId") : "?";
|
||||||
|
boolean running = item != null && item.optBoolean("running", false);
|
||||||
|
adapter.add((running ? "● " : "○ ") + id);
|
||||||
|
}
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
adapter.add("[error] " + (error != null ? error.optString("message") : "unknown"));
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(String message) {
|
||||||
|
runOnUiThread(() -> {
|
||||||
|
adapter.add("[error] " + message);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 空壳:默认连本机模拟器 server,后续从设置读取
|
||||||
|
client.connect("ws://10.0.2.2:8787/ws", "dshwatch", "change-me");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (client != null) client.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user