1/*
2 *  Copyright 2013 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11package org.appspot.apprtc;
12
13import org.webrtc.IceCandidate;
14import org.webrtc.PeerConnection;
15import org.webrtc.SessionDescription;
16
17import java.util.List;
18
19/**
20 * AppRTCClient is the interface representing an AppRTC client.
21 */
22public interface AppRTCClient {
23
24  /**
25   * Struct holding the connection parameters of an AppRTC room.
26   */
27  public static class RoomConnectionParameters {
28    public final String roomUrl;
29    public final String roomId;
30    public final boolean loopback;
31    public RoomConnectionParameters(
32        String roomUrl, String roomId, boolean loopback) {
33      this.roomUrl = roomUrl;
34      this.roomId = roomId;
35      this.loopback = loopback;
36    }
37  }
38
39  /**
40   * Asynchronously connect to an AppRTC room URL using supplied connection
41   * parameters. Once connection is established onConnectedToRoom()
42   * callback with room parameters is invoked.
43   */
44  public void connectToRoom(RoomConnectionParameters connectionParameters);
45
46  /**
47   * Send offer SDP to the other participant.
48   */
49  public void sendOfferSdp(final SessionDescription sdp);
50
51  /**
52   * Send answer SDP to the other participant.
53   */
54  public void sendAnswerSdp(final SessionDescription sdp);
55
56  /**
57   * Send Ice candidate to the other participant.
58   */
59  public void sendLocalIceCandidate(final IceCandidate candidate);
60
61  /**
62   * Disconnect from room.
63   */
64  public void disconnectFromRoom();
65
66  /**
67   * Struct holding the signaling parameters of an AppRTC room.
68   */
69  public static class SignalingParameters {
70    public final List<PeerConnection.IceServer> iceServers;
71    public final boolean initiator;
72    public final String clientId;
73    public final String wssUrl;
74    public final String wssPostUrl;
75    public final SessionDescription offerSdp;
76    public final List<IceCandidate> iceCandidates;
77
78    public SignalingParameters(
79        List<PeerConnection.IceServer> iceServers,
80        boolean initiator, String clientId,
81        String wssUrl, String wssPostUrl,
82        SessionDescription offerSdp, List<IceCandidate> iceCandidates) {
83      this.iceServers = iceServers;
84      this.initiator = initiator;
85      this.clientId = clientId;
86      this.wssUrl = wssUrl;
87      this.wssPostUrl = wssPostUrl;
88      this.offerSdp = offerSdp;
89      this.iceCandidates = iceCandidates;
90    }
91  }
92
93  /**
94   * Callback interface for messages delivered on signaling channel.
95   *
96   * <p>Methods are guaranteed to be invoked on the UI thread of |activity|.
97   */
98  public static interface SignalingEvents {
99    /**
100     * Callback fired once the room's signaling parameters
101     * SignalingParameters are extracted.
102     */
103    public void onConnectedToRoom(final SignalingParameters params);
104
105    /**
106     * Callback fired once remote SDP is received.
107     */
108    public void onRemoteDescription(final SessionDescription sdp);
109
110    /**
111     * Callback fired once remote Ice candidate is received.
112     */
113    public void onRemoteIceCandidate(final IceCandidate candidate);
114
115    /**
116     * Callback fired once channel is closed.
117     */
118    public void onChannelClose();
119
120    /**
121     * Callback fired once channel error happened.
122     */
123    public void onChannelError(final String description);
124  }
125}
126