-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathtutorial-simple-text-share.html
141 lines (122 loc) · 11.8 KB
/
tutorial-simple-text-share.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>rtc.io</title>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<link rel="stylesheet" type="text/css" href="css/main.css">
<!-- responsive -->
<link rel="stylesheet" media="screen and (max-width: 960px)" href="css/tablet.css">
<link rel="stylesheet" media="screen and (max-width: 710px)" href="css/phone.css">
<link rel="stylesheet" type="text/css" href="fonts/source-sans/stylesheet.css">
<link rel="stylesheet" type="text/css" href="css/code.css">
</head>
<body>
<a class="scroll-point pt-top" name="top"></a>
<header>
<a href="https://github.com/rtc-io"><img class="fork" src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png" alt="Fork me on GitHub"></a>
<a class="scroll-point pt-top" name="top"></a>
<div class="site">
<div class="mascot">
<img src="images/artsio.png">
</div>
<div class="logo" data-subtext="OpenSource WebRTC">
<a href="index.html">rtc.io</a>
</div>
<nav>
<ul>
<li><a href="index.html">About</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
<li><a href="demos.html">Demos</a></li>
<li><a href="modules.html">Modules</a></li>
</ul>
</nav>
</div>
<div class="shadow"></div>
</header>
<div class="main" role="content"><h1 id="simple-shared-text-box">Simple shared text box</h1>
<p>The essential part of any WebRTC application is a connection between peers. We will use the <a href="module-rtc-quickconnect.html">rtc-quickconnect</a> module to allow us to easily create a connection and share data.</p>
<p>First, we need to include the rtc-quickconnect module:</p>
<div class="highlight"><pre><span class="kd">var</span> <span class="nx">quickConnectMod</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'rtc-quickconnect'</span><span class="p">);</span>
</pre></div>
<p>Next, call the quickconnect module with the location of your signalling server and your connection options - this will return a reference to our connection object. For now we will use the rtc.io signalling server at <a href="http://rtc.io/switchboard/">http://rtc.io/switchboard/</a> (for testing purposes only). The <a href="module-rtc-switchboard.html">rtc-switchboard</a> module can be deployed on your own servers.</p>
<p>In our options object we will include a room name to tell the siganlling server which peers should be connected to each other.</p>
<div class="highlight"><pre><span class="kd">var</span> <span class="nx">quickConnectObj</span> <span class="o">=</span> <span class="nx">quickConnectMod</span><span class="p">(</span><span class="s1">'//switchboard.rtc.io'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">room</span><span class="o">:</span> <span class="s1">'rtcio-text-demo'</span> <span class="p">});</span>
</pre></div>
<p>We'll also need to create and reference a contenteditable DOM element where our users will type text to share.</p>
<div class="highlight"><pre><span class="kd">var</span> <span class="nx">messageWindow</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">'textarea'</span><span class="p">);</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">rows</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">cols</span> <span class="o">=</span> <span class="mi">80</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">bodyElement</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s1">'body'</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
<span class="nx">bodyElement</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">messageWindow</span><span class="p">);</span>
</pre></div>
<p>Now that we have a reference to our connection object we use it to create a data channel to send our text over.</p>
<div class="highlight"><pre><span class="nx">quickConnectObj</span><span class="p">.</span><span class="nx">createDataChannel</span><span class="p">(</span><span class="s1">'shared-text'</span><span class="p">);</span>
</pre></div>
<p>Once our channel is created we can listen on our connection object for it's events. For a full list of the events available, see the documentation for the <a href="module-rtc-quickconnect.html">rtc-quickconnect</a> module.</p>
<div class="highlight"><pre><span class="nx">quickConnectObj</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'channel:opened:shared-text'</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">dataChannel</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">bindDataEvents</span><span class="p">(</span><span class="nx">dataChannel</span><span class="p">);</span>
<span class="p">});</span>
</pre></div>
<p>Now that our peers are connected in a named room and have a data channel open we can start sending and receiving data over the connection.</p>
<div class="highlight"><pre><span class="kd">function</span> <span class="nx">bindDataEvents</span><span class="p">(</span><span class="nx">channel</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Receive message</span>
<span class="nx">channel</span><span class="p">.</span><span class="nx">onmessage</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">evt</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">evt</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1">// Send message</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">onkeyup</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">evt</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">channel</span><span class="p">.</span><span class="nx">send</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">value</span><span class="p">);</span>
<span class="p">};</span>
<span class="p">}</span>
</pre></div>
<p>This creates a basic shared text box.</p>
<div class="highlight"><pre><span class="c1">// rtc-quickconnect requires a signalling server location and a room name.</span>
<span class="kd">var</span> <span class="nx">quickConnectMod</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'rtc-quickconnect'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">quickConnectObj</span> <span class="o">=</span> <span class="nx">quickConnectMod</span><span class="p">(</span><span class="s1">'//switchboard.rtc.io'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">room</span><span class="o">:</span> <span class="s1">'rtcio-text-demo'</span> <span class="p">});</span>
<span class="c1">// Create the text area for chatting</span>
<span class="kd">var</span> <span class="nx">messageWindow</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">'textarea'</span><span class="p">);</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">rows</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">cols</span> <span class="o">=</span> <span class="mi">80</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">bodyElement</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s1">'body'</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
<span class="nx">bodyElement</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">messageWindow</span><span class="p">);</span>
<span class="c1">// Create a data channel and bind to it's events</span>
<span class="nx">quickConnectObj</span><span class="p">.</span><span class="nx">createDataChannel</span><span class="p">(</span><span class="s1">'shared-text'</span><span class="p">);</span>
<span class="nx">quickConnectObj</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'channel:opened:shared-text'</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">dataChannel</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">bindDataEvents</span><span class="p">(</span><span class="nx">dataChannel</span><span class="p">);</span>
<span class="p">});</span>
<span class="kd">function</span> <span class="nx">bindDataEvents</span><span class="p">(</span><span class="nx">channel</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Receive message</span>
<span class="nx">channel</span><span class="p">.</span><span class="nx">onmessage</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">evt</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">evt</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1">// Send message</span>
<span class="nx">messageWindow</span><span class="p">.</span><span class="nx">onkeyup</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">evt</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">channel</span><span class="p">.</span><span class="nx">send</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">value</span><span class="p">);</span>
<span class="p">};</span>
<span class="p">}</span>
</pre></div>
</div>
<footer>
<p>
<a href="http://nicta.com.au">
<img src="images/nicta-logo.gif" alt="NICTA logo">
</a>© NICTA 2013 - 2014
</p>
<p class="license">Project source code is licensed under the <a href="https://github.com/rtc-io/rtc/blob/master/LICENSE">Apache 2.0</a>.</p>
<a class="closing" href="#top"></a>
</footer>
</body>
<script src="js/app.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-26567546-2', 'rtc.io');
ga('send', 'pageview');
</script>
</html>