Leap MotionアプリをWindowsストアに申請して認定させる

2014年2月5日(水)
薬師寺 国安

次に、ソリューション・エクスプローラー内の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
  • Leap Motionを使ったWindowsアプリのサンプル

    『Windows 8.1+Visual Studio 2013によるWindows ストア・アプリ開発実例集』 第6回のサンプルプログラムです。
薬師寺国安事務所

薬師寺国安事務所代表。Visual Basic プログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット PROJECT KySS を結成。2003年よりフリーになり、PROJECT KySS の活動に本格的に参加、.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Windows Phoneアプリ開発を経て、現在はWindows ストア アプリを多数公開中

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています