JavaScript Editor JavaScript Editor     JavaScript Debugger 



Team LiB
Previous Section Next Section

The Discovery Service

The discovery service wraps the P2PDatabase component. As with the discovery service in Chapter 8, it catches all exceptions, logs them, and replaces them with a generic ApplicationException to ensure that no sensitive information will be returned to the client.

Peers interact with the discovery service as follows:

  1. New users call RegisterNewUser() to create a new record in the Peers table.

  2. Users call StartSession() to log in, supply their current connectivity information, and create a new record in the Sessions table.

  3. Users call GetPeers() periodically to retrieve a list of other users. In turn, GetPeers() calls RefreshSession(), ensuring that the record for the requesting peer is kept current.

  4. If a user wants to send a message, it calls GetPeer() to retrieve the connectivity information for a specific user. It can then contact the user directly.

  5. When the user is finished and wants to leave the peer community, it calls EndSession() to remove the session record.

The full DiscoveryService code is shown here:

Public Class DiscoveryService
    Inherits System.Web.Services.WebService

    Private DB As New P2PDatabase()

    <WebMethod()> _
    Public Sub RegisterNewUser(ByVal emailAddress As String)

        Try
            DB.AddPeer(emailAddress)
        Catch err As Exception
            Trace.Write(err.ToString)
            Throw New ApplicationException("Could not register new user.")
        End Try

    End Sub

    <WebMethod()> _
    Public Function StartSession(ByVal emailAddress As String, _
      objRef() As Byte) As Guid

        Try
            Return DB.CreateSession(emailAddress, objRef)
        Catch err As Exception
            Trace.Write(err.ToString)
            Throw New ApplicationException("Could not create session.")
        End Try

    End Function

    <WebMethod()> _
    Public Sub RefreshSession(ByVal sessionID As Guid)

        Try
            DB.RefreshSession(sessionID)
        Catch err As Exception
            Trace.Write(err.ToString)
            Throw New ApplicationException("Could not refresh session.")
        End Try

    End Sub

    <WebMethod()> _
    Public Sub EndSession(ByVal sessionID As Guid)

        Try
            DB.DeleteSession(sessionID)
        Catch err As Exception
            Trace.Write(err.ToString)
            Throw New ApplicationException("Could not end session.")
        End Try

    End Sub

    <WebMethod()> _
    Public Function GetPeerInfo(ByVal emailAddress As String, _
      ByVal sessionID As Guid) As PeerInfo

        Try
            Return DB.GetPeerInfo(emailAddress)
        Catch err As Exception
            Trace.Write(err.ToString)
            Throw New ApplicationException("Could not find peer.")
        End Try

    End Function

    <WebMethod()> _
    Public Function GetPeers() As String()

        Try
            RefreshSession(sessionID)
            Return DB.GetPeers()
        Catch err As Exception
            Trace.Write(err.ToString)
            Throw New ApplicationException("Could not find peers.")
        End Try

    End Function

End Class

Team LiB
Previous Section Next Section


JavaScript Editor Free JavaScript Editor     JavaScript Editor