0

前の質問で推奨されているように、JavaスレッドとBlockingQueues(プロデューサーキューとコンシューマーキュー)を使用してクライアントサーバーアプリケーションをモデル化しました。

私が持っているのはサーバーにありBlockingQueue<Request>、それはクライアントに応答をプッシュしますBlockingQueue<Response>。ここでの問題は、サーバー関数を呼び出すようにクライアントを設定する方法です。私はクライアントを持っていますrun()

while (true) {
    Response res = responses.take();
    switch (res.function) {
    case "getReservationStatus":
        TreeMap<Integer, Boolean> reservations = (TreeMap<Integer, Boolean>) res.data;
        //System.out.println("getReservationStatus");
        for (Entry<Integer, Boolean> reservation : reservations.entrySet()) {
            //System.out.println(" - " + reservation.getKey() + " \t " + (reservation.getValue() ? "Booked" : "Available"));
        }
        break;
    case "book":
        SimpleEntry<Integer, Boolean> data = (SimpleEntry<Integer, Boolean>) res.data;
        System.out.println(terminalId + ": Booking seat " + data.getKey() + " " + (data.getValue() ? "Successful" : "Unsucessful"));
        break;
    }
}

どうすれば、main()許可ユーザーがクライアントに送信するコマンドを制御できるようになりますか?今のところ、「シミュレーション」をハードコーディングする前にwhile

4

1 に答える 1

0

あなたの質問を理解できるかどうかはわかりませんが、答えといくつかのアイデアを提供しようと思います。

プログラムのユーザーインターフェイスを実装する場合は、最初に、ユーザーがプログラムで何ができるかを定義する必要があります。一般的な方法の1つは、ユースケースを定義し、そこからインターフェイスを推測することです。むしろ、これらのユースケースから機能を定義するとしましょう。つまり、アプリのカーネルが完成しているので、明らかにそのステップはもう必要ありません。

アプリは、リクエストをサーバーにプッシュして処理させ、レスポンスを取得することを目的としています。これらのリクエストとそのパラメータは、サーバーが理解できる言語を構成します。同様に、応答はクライアントが理解できる言語であるため、要求言語を中心にUIをモデル化できます。その言語が十分に単純な場合は、UIで簡単に実装できるツリーとして表すことができます。

基本的に3つのオプションがあります。

  • テキスト入力UII:おそらく最も単純なものですが、

  • グラフィカルなUII(たとえばスイング)、

  • WebUI

3つのケースすべてで、インターフェイスはメニューとサブメニューのリストとしてモデル化でき、リクエストのすべての可能性をカバーします。各リクエストは最初のメニューのエントリであり、各サブメニューレベルは選択したリクエストの改良を表します。先ほどほのめかした木との類似点がここにあります。グラフィカルUIまたはWebUI(結局のところグラフィカルUIでもあります)の場合、これはほとんど達成するのが簡単です。そのためのチュートリアルがWeb上にたくさんあります。テキスト入力の場合は、項目の番号付きリスト(メニュー)を表示し、ユーザーに選択肢を選択するように求めることができます。

いくつかのメモ:

現状のアプリは、複数のクライアントと1つのサーバーの相互作用をモデル化しています。UIでそれをどのように使用できるかわかりません。おそらく、クライアントを生成および管理するための一連のコマンドを使用して言語を拡張し、どのクライアントがどの要求を送信する必要があるかを示すことができます。

冒険心があり、テキスト入力を選択した場合は、クエリを表すために実際の言語をモデル化して、そのためのパーサーを実装してみてください。これも非常に幅広いトピックですが、非常に興味深いものです。とにかく、あなたは後であなたの研究でそれに入るかもしれません。

リクエストが複雑または入力が面倒な場合は、テンプレートシステムを考案して、ユーザーがリクエストテンプレートを作成して名前を付け、同じリクエストを再度入力する代わりに後で参照できるようにすることができます。ここで、小さなプログラミング言語にどのように近づいているかをご覧ください。

Javaの世界のWebアプリは通常、かなり複雑なフレームワークとツールに基づいています。UIについての良いアイデアを得るために、最初に他のオプションから始めたいと思うでしょう。

私のコメントで述べたように、グラフィカルUIの場合は、EclipseやNetBeansなどのIDEを試してください。これにより、すべてをグラフィカルに簡単に定義し、コードを特定のイベント(ボタンを押すなど)にフックできます。

于 2013-03-01T15:43:00.040 に答える