ロジックコードを記述する
次に、ソリューション・エクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト1のコードを記述します。
ロジックコードを記述する
リスト1 (MainWindow.xaml.vb)
Imports Windows.UI
‘ Windowsストア・アプリにバックグラウンドで受信されるリアルタイムネットワーク通知に対して、ネットワーク通信とクラスで
‘ 使用するための、ソケットとWebSokectsクラスを提供する、Windows.Networking.Sockets名前空間
‘ をインポートします。
Imports Windows.Networking.Sockets
‘ シーケンシャルアクセスストリームおよびランダムアクセスストリームに対する読み取りと書きこみをサポートするクラスの含まれる、
‘ Windows.Storage.Streams名前空間をインポートします。
Imports Windows.Storage.Streams
‘ Json のシリアル化に関連するクラスを提供するSystem.Runtime.Serialization.Json名前空間をインポートします。
Imports System.Runtime.Serialization.Json
‘ マルチスレッドプログラミングを実現するクラスとインターフェイスを提供するクラスの含まれる、
‘ System.Threading名前空間をインポートします。
Imports System.Threading
‘ JSON の配列、値、およびオブジェクトのサポートを提供するクラスの含まれる、Windows.Data.Json
‘ 名前空間をインポートします。
Imports Windows.Data.Json
‘ JSONにLINQ を実装するクラスを提供する、Newtonsoft.Json.Linq名前空間をインポートします。
Imports Newtonsoft.Json.Linq
‘ フレームワークのコア サービスの実装に使用されるクラスを提供する、Newtonsoft.Json名前空間をインポートします。
Imports Newtonsoft.Json
Public NotInheritable Class MainPage
Inherits Page
‘ WebSocketを使用して、メッセージ全体の読み取りと書きこみを可能にするネットワーク通信を可能にする、
‘ MessageWebSocketクラス型のメンバー変数Clientを宣言します。
Private Client As MessageWebSocket
‘ 同じく、MessageWebSocketクラス型のメンバー変数messageWebSocketを宣言します。
Private messageWebSocket As MessageWebSocket
‘ XML要素を表すXElementクラス型のメンバー変数xmldocを宣言します。
Private xmldoc As XElement
‘ 指定した型のコレクションに対する単純な反復処理をサポートする列挙子を公開する、
‘ IEnumerable(Of System.Xml.Linq.XElement)インターフェイス型のメンバー変数myPointablesを宣言します。
Private myPointables As IEnumerable(Of System.Xml.Linq.XElement)
Private myPointableCount As Integer
‘ 乱数を発生させるRandomクラス型のメンバー変数Rndを宣言します。
Private Rnd As Random
Private messageText As String
Private flag As Boolean = False
ページがアクティブになった時の処理
AddHandlerステートメントで、構成ツリーのオブジェクトがレンダリングされる直前に発生する、CompositionTarget.RenderingイベントにCompositionTarget_Renderingイベントハンドラを追加します。 コンピュータでランダムな数字を発生させるDataShowメソッドを実行します。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
AddHandler CompositionTarget.Rendering, AddressOf Me.CompositionTarget_Rendering
DataShow()
End Sub
ランダムな数字を発生させる処理
Randomクラスの新しいインスタンスRndを生成し、1から6までのランダムな数値を発生させます。しかし、戻り値の範囲にmaxValueは含まれないため、6の上限値は生成されません。よって、このアプリでは1から5までのランダムな数値が生成されることになります。1から5までの乱数ということで、Dim myRnd = Rnd.Next(1, 5)と指定すると、5は戻り値の範囲に含まれませんので、1から4までの間の乱数しか生成されないため、注意してください。名前がsourceTextBoxにこのランダムな数値を表示しておきます。ただし、非表示になっています。
Private Sub DataShow()
Rnd = New Random
Dim myRnd = Rnd.Next(1, 6)
sourceTextBox.Text = myRnd.ToString
End Sub
構成ツリーのオブジェクトがレンダリングされる直前に発生する、CompositionTarget.Renderingメソッド
ブール型変数connectingをTrueで初期化します。
通信がされていない時は、新しいMessageWebSocketのインスタンスClientオブジェクトを作成します。
AddHandlerステートメントで、メッセージがMessageWebSocketオブジェクトで受信された時に発生するMessageRecievedイベントにClient_MessageReceivedイベントハンドラを追加します。
AddHandlerステートメントで、終了ハンドシェイクの一部として、終了フレームがMessageWebsocketオブジェクトで受信された時に発生する、Closedイベントに、Client_Closedイベントハンドラを追加します。
MessageWebSocketオブジェクトに構成される、WebSocketメッセージ型としてUtf8を指定します。
MessageWebSocketオブジェクトで、リモートネットワーク送信先に接続する非同期操作である、ConnectAsyncメソッドにポート6437を指定します。指定する方法としては、
Await Client.ConnectAsync(New Uri("ws://127.0.0.1:6437/"))
と指定します。
ブール型変数connectingをFalseで初期化します。
例外が発生した時に、ブール型変数connectingがFalse、かつ通信がされていた場合は、通信のリソースを解放、または解除します。
非同期処理で行われるため、メソッドの先頭にAsyncを追加します。
Private Async Sub CompositionTarget_Rendering(sender As Object, e As Object)
Dim connecting As Boolean = True
Try
If Client Is Nothing = True Then
Client = New MessageWebSocket
AddHandler Client.MessageReceived, AddressOf Client_MessageReceived
AddHandler Client.Closed, AddressOf Client_Closed
Client.Control.MessageType = SocketMessageType.Utf8
Await Client.ConnectAsync(New Uri("ws://127.0.0.1:6437/"))
connecting = False
End If
Catch
If connecting = False AndAlso Client Is Nothing = False Then
Client.Dispose()
Client = Nothing
End If
End Try
End Sub
- この記事のキーワード