コラム / 1:1:チャット / 8


#navi(コラム/1:1チャット): Not a child page like: コラム/1:1チャット/8
受信処理ができたので、
送信処理を作りましょう。
発言ボタンをダブルクリックして、
ボタンのOnClickイベントを書き換えます。
img28.png
を
procedure TForm1.Button1Click(Sender: TObject);
var ptr:Pointer;
   sz:Integer;
   say:string;
begin
   say:=Edit1.Text;
   Edit1.Text:='';

   sz:=Pack(ptr,'t',[@say]);

   Session.SetBlock(0,0,ptr,sz);
   Session.SetBlock(1,0,ptr,sz);
end;
まず、Editに書かれている内容を文字列型に代入します。
そしたらEditを消します。
そしたら、Unpackの逆で、Packをします。
Packはできたブロックのサイズを返すので、
szに代入し、作ったブロックは第一引数のポインタの参照先になります。
't'ってのは、テキスト一個お願いします、です。
で、そのテキスト一個は[@say]となり、さっきと同じですね。
ブロックを組み立て、サイズがわかったら、
セッション.setBlockで送信します。
第一引数:送る人
第二引数:メッセージ番号(今回は発言しかしないので0
第3引数:ブロックのぽいんた(packの第1引数
第4引数:ブロックの長さ(packの返り値
てなことです。
二人居るので0と1で二回やります。
N3Libは、自分自身への送信は検知して、
あたかも送られてきたかのように処理するので、
ネットワークには送信せずに、受信ブロックキューにいれておきます。
なのでGetBlockで受け取れるわけです。
ついでに、非接続先も検知して退避してくれます。
そうそう、
Open,Close,Join,Leaveも間違って使うと検知します。
デバッグテキストに文句が吐かれますが。
一応メモリリーク等も可能な限り自分で解決してますよ。
#navi(コラム/1:1チャット): Not a child page like: コラム/1:1チャット/8