HyperCard tribute

ネットワークシステム


 Macintoshは、簡単にネットワークを構築することができます。最近は、画像データやサウンドデータ、ホームページのデータなどフロッピー1枚に入りきらないデータが増えてきました。データの移動に今までフロッピーディスクを使ってファイルのやり取りをしていた人には、そのごく簡単な操作と、プリンタケーブルのみでネットワークが構築できることに驚くことでしょう。モバイルコンピュータをもっておられる方であれば、デスクトップコンピュータのデータとのシンクロが容易にできるようにもなります。
 この機能とHyperCardを用いて、チャットシステムを作ってみることにします。以下にチャットシステム時に必要な接続手順を示します。

必要な物:
プリンターケーブル(2台の接続時)
(ただし、3台以上の接続にはLocalTalkコネクションキットが必要となります)


チャットシステムに必要な接続手順:
■ケーブルをつなぐ
■互いのMacintoshで利用者の設定をする
■「共有設定」を設定する
■HyperCard本体のプログラムリンクを設定する


■ケーブルをつなぐ
プリンタケーブルをそれぞれのMacintoshのシリアルポート(プリンタ・モデムポート)に接続する

■互いのMacintoshで利用者の設定をする
(1)コントロールパネルの「利用者&グループ」を開く
(2)メニュー「ファイル」の「新規利用者」を選択し、ファイル名をその人の名前にする

(3)作成した利用者ファイルを開く
(3)パスワードを設定する(これは、利用者が利用するときに必要なパスワードです)
(4)プログラムリンクをチェックする



■「共有設定」を設定する
(1)コントロールパネルの「共有設定」を開く

(2)「プログラムリンク」のボタンをクリックする(ボタンは「開始」から「中止」へと変わります)


■HyperCard本体のプログラムリンクを設定する
(1)HyperCard本体をクリックし、メニュー「ファイル」の「共有...」を選択する
(2)プログラムリンクを許可する」をチェックする


ちなみに、ファイルの共有をするためには以下の手順が必要です。

接続手順:
■ケーブルをつなぐ
■互いのMacintoshで利用者の設定をする
以上の2つはチャットシステム時の設定と同じです。
■「共有設定」を設定する
■共有フォルダを作成する


■「共有設定」を設定する
(1)コントロールパネルの「共有設定」を開く

(2)ファイル共有のボタンをクリックする



■共有フォルダを作成する
(1)デスクトップに「新規フォルダ」を作成し、フォルダ名を「共有フォルダ」にする
(フォルダ名はどんなものでも構わないのですが、なるべくわかりやすい名前を付けておく方が良いでしょう)
(2)メニュー「ファイル」の「共有...」を選び、「この項目と内容を共有する」をチェックする


 共有したい書類は、共有フォルダにファイルを置くことで共有が可能となります。共有フォルダを作成せずにハードディスク全てを「共有...」させることもできますが、こちらの方法では時間がかかりますし、なによりセキュリティーの面で問題があります。パスワードの設定についてもこれと同じです。
 たとえ、閉鎖された環境、例えば自宅などで使っているとしても、できるだけこちらの方法を取る方が良いでしょう。



チャットシステム概要

(1)・・・フィールド「接続相手」 
(2)・・・フィールド「message」 
(3)・・・フィールド「log」 
(4)・・・ボタン「接続する」 
接続相手の名前を表示します
相手に送信するメッセージをここに書きます
通信のログがここに追加されていきます
接続準備を始めます。接続後はボタン「接続を切る」に切り替わります



チャットスタック「チャットシステム」
 ダウンロード(17KB)



ボタン「接続する」のスクリプト
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
on mouseUp
  global UserName,address,name
  answer program "送り先のHyperCardは?" of type WILD
  if the result is not empty then exit mouseUp
  put it into address
  request "UserName" from program address
  if it is empty then get lastHCItem (":",address)
  put it into name
  send "answer"&"e&UserName&"さんからチャットのお誘いです""e&&"with"&&
quote&"OK""e&&"or"&"e&"Cancel""e to program address
  request "it" from program address
  if it is "OK" then
    request "short name of this stack" from program address
    if it is not short name of me then
      send "go stack"&"e&short name of this stack"e to program address
    end if
    get the result
    if it is not empty then
      answer "「チャットシステム」を起動して下さい"
      exit mouseUp
    end if
    send "ChatStart"&"e&UserName&","&the address"e to program address
    put name&&"さんとのチャット中です" into cd fld "接続相手"
    set the enabled of cd btn "接続する" to false
    set the enabled of cd btn "接続を切る" to true
    put empty into cd fld"log"
    select text of cd fld "message"
  else answer "相手はチャットに応じませんでした"
end mouseUp

UserName(HyperCardに登録してある名前)
address(接続する相手のアドレス。「ゾーン名:マシン名:プログラムのパス名」という形で表されます。例:*:Quadra 830:HD 300:HC:HyperCard2.2)
name(接続する相手の名前。接続相手のUserNameがnameに代入されます)

  • answer program "送り先のHyperCardは?" of type WILD
     3行目では接続先のHyperCardを聞いてきます。最後にof type WILDをつけ加えることで、ダイアログにはHyperCardしか表示されなくなります。



  • request "UserName" from program address
     6行目では接続先のHyperCardに登録してある名前を取り出します。request命令は接続先のデータを取り出すときに用いられます。
     取り出した名前は8行目で変数nameに代入されます。


  • send "answer"&& quote&UserName&"さんからチャットのお誘いです"& quote&&"with"&& quote&"OK"& quote&&"or"&& quote&"Cancel"& quote to program address
     9行目では接続先のHyperCardにanswer命令を送ります。接続先のHyperCard上で下の図のような画面が表示されます。
     quoteはダブルクォーテーションの事を意味しています。
    「"answer"&& quote&UserName&"さんからチャットのお誘いです"& quote&&"with"&& quote&"OK"& quote&&"or"&& quote&"Cancel"& quote
    ("answer "????さんからチャットのお誘いです" with "OK" or "Cancel"")
      を
    「program address(addressに表されているプログラム)」
      に
    「send 〜 to 〜(メッセージを送る)」


  • request "short name of this stack" from program address
     12行目では接続先のMacintoshで起動しているスタックの名前を取り出しています。この後、その名前が「チャットシステム」と違えば「チャットシステム」スタックへと移動します。
     ただし、チャットシステムが立ち上がってなければ(16〜20行目の処理になります)、エラーメッセージ「「チャットシステム」を起動して下さい」を表示し終了します。


  • send "ChatStart"&& quote&UserName&","&the address& quote to program address
     21行目では、ハンドラ「ChatStart」へメッセージを送ります。すなわち、ChatStartハンドラが実行されます。


  • select text of cd fld "message"
     カーソルをフィールド「message」に表示します。



    ハンドラ「ChatStart」のスクリプト
     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9 
    10 
    
    on ChatStart sender
      global name,address
      put sender into address
      put item 1 of sender into name
      put name&&"さんとのチャット中です" into cd fld "接続相手"
      set the enabled of cd btn "接続する" to false
      set the enabled of cd btn "接続を切る" to true
      put empty into cd fld "log"
      select text of cd fld "message"
    end ChatStart
    

  • put sender into address
     パラメータ「sender」には以下の情報が入っています。
    「井上毅彦,*:いのうえのMacintosh:HyperCard」




    フィールド「message」のスクリプト
     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
    
    on returnInField
      global address
      if cd fld "接続相手" is empty then pass returnInField
      put me&return after cd fld "log"
      send "msgNow"&& quote&me& quote to program address
      put empty into me
      select text of me
    end returnInField
    
     returnInFieldは、リターンキーを押したときに、現在入力状態になっているフィールドに送られるメッセージです。

  • if cd fld "接続相手" is empty then pass returnInField
     3行目ではフィールド「接続相手」の内容を調べています。もしemptyであれば、処理をpassします。


  • send "msgNow"&& quote&me& quote to program address
     5行目でハンドラ「msgNow」へメッセージを送ります。



    ハンドラ「msgNow」のスクリプト
     1 
     2 
     3 
     4 
     5 
    
    on msgNow str
      global name
      put name&">"&str&return after cd fld "log"
      select after text of cd fld "message"
    end msgNow
    
     パラメータ「str」には、受信したメッセージが納めてあります。



    ハンドラ「ChatEnd」のスクリプト
     1 
     2 
     3 
     4 
     5 
     6 
    
    on ChatEnd
      put empty into cd fld "接続相手"
      answer "チャットを終了しました"
      set the enabled of cd btn "接続する" to true
      set the enabled of cd btn "接続を切る" to false
    end ChatEnd
    
     接続相手がチャットを終了した際の処理を行います。



    ボタン「接続を切る」のスクリプト
     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9 
    
    on mouseUp
      global address
      answer "チャットを終わりますか?" with "OK" or "Cancel"
      if it is "Cancel" then exit mouseUp
      send "chatEnd" to program address without reply
      put empty into cd fld "接続相手"
      set the enabled of cd btn "接続する" to true
      set the enabled of cd btn "接続を切る" to false
    end mouseUp
    
     ハンドラ「ChatEnd」とは違い、自分がチャットを終了した際の処理を行っています。



     ネットワークに関係するスタックを作成するときに守らなければならないポイントを下に挙げてみます。

    ・接続するときは必ず相手に確認を取る
    ・接続相手側で処理をする場合はハンドラを用意しておき、それを呼び出すメッセージのみを送信する
    ・接続相手側でスタックが開かれていない可能性のあるときは、HyperTalkのコマンドを送信する(最初の接続時など)
    ・接続相手側でエラーの出る可能性のある場合は、without replyをしない

     当然のことですがネットワーク処理は、相手のMacintoshにも影響を与えます。これらのポイントは、スクリプト上の問題と同時にエチケットの問題にもつながってきますので、気を付けるべき重要ポイントでしょう。