ターミナルエミュレータライブラリを使用してターミナルを作成し、それを使用してシリアル経由で入力されたデータをシリアルデバイスに送信します。端末の完全なバージョンと一緒に、ユーザーの結果のより簡単なバージョンを表示する画面上に、おそらくテキストボックスだけのような他のグラフィカルインターフェイスを作成したいと思っているわけではありません。これを一目見るだけで、結果をすばやく確認できます。私はそれを最もよく解析する方法を考えています。コマンドを送信すると、結果の 1 つのセットの例として、次のようなデータを含むバイト配列が返されます。
Interface IP-Address Status Protocol
vlan1 192.168.1.1 up up
Fa0/1i unassigned administratively down down
Fa0/1o unassigned down down
Fa1/0 unassigned down down
Fa1/1 unassigned down down
Fa1/2 unassigned down down
Fa1/3 unassigned down down
Fa1/4 unassigned down down
Fa1/5 unassigned down down
Fa1/6 unassigned down down
Fa1/7 unassigned down down
Fa1/8 unassigned up up
Fa1/9 unassigned down down
Fa1/10 unassigned up up
Fa1/11 unassigned down down
Gi0 unassigned up up
switch#
これをどのように解析しますか?「インターフェイス vlan1 は 192.1.1.168 の IP で稼働しています」または「インターフェイス Fa1/8 は割り当てられていない IP アドレスで稼働しています」のようなものを希望します。最も関連性の高いデータをリストするだけで、ユーザーに表示されます。私はちょうど次のようなことを言うでしょうか:
if (dataReceived.charAt(i) == 'v'
&& dataReceived.charAt(i + 1) == 'l'
&& dataReceived.charAt(i + 2) == 'a'
&& dataReceived.charAt(i + 3) == 'n')
&& dataReceived.charAt(i + 4) == '1')
&& etc //check i is in bounds, check is the next non-whitespace character a number or a u somehow and so on
{
//do things here
//print out "The interface vlan1 is up with an IP of 192.1.1.168"
}
この方法は、すべてのバイトをチェックし、次のバイトが何であるかを確認するなど、非常に面倒に思えます。しかし、これは最善/正しい方法ですか?
編集:これは私が現在持っているサンプルで、データを受け取っている場所と、特定のデータについてテストしている場所です:
public void onDataReceived(int id, byte[] data) {
dataReceived = new String(data);
try {
dataReceivedByte = dataReceived.getBytes("ASCII");
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "exception");
e.printStackTrace();
}
statusBool = true;
Log.d(TAG, "in data received " + dataReceived);
((MyBAIsWrapper) bis).renew(data);
runOnUiThread(new Runnable(){
@Override
public void run() {
}});
viewHandler.post(updateView);
}
Handler viewHandler = new Handler();
Runnable updateView = new Runnable() {
@Override
public void run() {
mEmulatorView.invalidate();
if (statusBool == true) {
for (int i = 1; i < dataReceived.length() - 1; i++) {
if (dataReceived.charAt(i) == '>') {
Log.d(TAG, "found >");
deviceStatus = 0;
}
if (dataReceived.charAt(i) == '#'
&& dataReceived.charAt(i - 1) != ')') {
Log.d(TAG, "found #");
deviceStatus = 1;
}
if ((i + 1) <= (dataReceived.length())
&& dataReceived.charAt(i) == ')'
&& dataReceived.charAt(i + 1) == '#') {
Log.d(TAG, "found config )#");
deviceStatus = 2;
}
}
statusBool = false;
viewHandler.postDelayed(updateView, 1000);
}
}
};