├── .gitignore
├── LICENSE.txt
├── CHANGELOG.txt
├── Resources
├── iphone
│ ├── Default.png
│ ├── appicon.png
│ ├── Default@2x.png
│ ├── Default-Portrait.png
│ └── Default-Landscape.png
├── play.js
├── bj.js
└── app.js
├── manifest
├── README
├── bonjour.tmproj
├── tiapp.xml
└── LICENSE
/.gitignore:
--------------------------------------------------------------------------------
1 | tmp
2 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Place your license text here. This file will be incorporated with your app at package time.
--------------------------------------------------------------------------------
/CHANGELOG.txt:
--------------------------------------------------------------------------------
1 | Place your change log text here. This file will be incorporated with your app at package time.
--------------------------------------------------------------------------------
/Resources/iphone/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rborn/Advanced-Titanium-Tutorial---Bonjour-Networking/HEAD/Resources/iphone/Default.png
--------------------------------------------------------------------------------
/Resources/iphone/appicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rborn/Advanced-Titanium-Tutorial---Bonjour-Networking/HEAD/Resources/iphone/appicon.png
--------------------------------------------------------------------------------
/Resources/iphone/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rborn/Advanced-Titanium-Tutorial---Bonjour-Networking/HEAD/Resources/iphone/Default@2x.png
--------------------------------------------------------------------------------
/Resources/iphone/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rborn/Advanced-Titanium-Tutorial---Bonjour-Networking/HEAD/Resources/iphone/Default-Portrait.png
--------------------------------------------------------------------------------
/Resources/iphone/Default-Landscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rborn/Advanced-Titanium-Tutorial---Bonjour-Networking/HEAD/Resources/iphone/Default-Landscape.png
--------------------------------------------------------------------------------
/manifest:
--------------------------------------------------------------------------------
1 | #appname: bonjour
2 | #publisher: Spawn
3 | #url: http://dan-tamas.me
4 | #image: appicon.png
5 | #appid: info.rborn.bongour
6 | #desc: undefined
7 | #type: mobile
8 | #guid: db8ecc5a-3a91-4e01-8c4e-02b2fb2edebd
9 |
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | Just download the project and import it in you Titanium Developer.
2 | The whole tutorial can be found here:
3 |
4 | http://cssgallery.info/advanced-titanium-tutorial-bonjour-networking/
5 |
6 |
7 |
8 | Dan Tamas
9 | http://dan-tamas.me
--------------------------------------------------------------------------------
/bonjour.tmproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | documents
6 |
7 |
8 | expanded
9 |
10 | name
11 | bonjour
12 | regexFolderFilter
13 | !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
14 | sourceDirectory
15 |
16 |
17 |
18 | fileHierarchyDrawerWidth
19 | 200
20 | metaData
21 |
22 | showFileHierarchyDrawer
23 |
24 | showFileHierarchyPanel
25 |
26 | treeState
27 |
28 | bonjour
29 |
30 | isExpanded
31 |
32 | subItems
33 |
34 |
35 |
36 | windowFrame
37 | {{203, 4}, {1227, 874}}
38 |
39 |
40 |
--------------------------------------------------------------------------------
/tiapp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | info.rborn.bongour
4 | bonjour
5 | 1.0
6 | not specified
7 | not specified
8 | not specified
9 | not specified
10 | appicon.png
11 | false
12 | false
13 | default
14 | true
15 | true
16 | true
17 | false
18 | db8ecc5a-3a91-4e01-8c4e-02b2fb2edebd
19 |
20 |
21 | Ti.UI.PORTRAIT
22 |
23 |
24 | Ti.UI.PORTRAIT
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Resources/play.js:
--------------------------------------------------------------------------------
1 | // © Dan Tamas - http://dan-tamas.me
2 | // More tutorials on http://cssgallery.info/category/titanium-appcelerator/
3 | // This code is MIT licensed.
4 |
5 |
6 |
7 | var win = Titanium.UI.currentWindow;
8 |
9 |
10 | Titanium.include('bj.js');
11 |
12 |
13 | function connected_player(name) {
14 | alert(name);
15 | }
16 |
17 | var connection = bjnet(win.player.name, function(data){
18 | var json_data = JSON.parse(data);
19 | make_blob(json_data.player,json_data.coords);
20 | });
21 |
22 | connection.start();
23 |
24 |
25 |
26 | var tr = Titanium.UI.create2DMatrix();
27 | tr = tr.scale(1.5);
28 |
29 |
30 |
31 | make_blob = function(player,coords) {
32 | var the_blob = Titanium.UI.createView({
33 | center:coords,
34 | height:30,
35 | width:30,
36 | backgroundColor:player.color,
37 | backgroundGradient:{
38 | type:'radial',
39 | colors:[player.color.replace(/0/g,9),player.color],
40 | startPoint:{x:10,y:10},
41 | endPoint:{x:10,y:10},
42 | backFillStart:true
43 | },
44 | borderRadius:15,
45 | borderColor:'#fff',
46 | borderWidth:1
47 | });
48 |
49 | win.add(the_blob);
50 |
51 | the_blob.animate({
52 | transform:tr,
53 | repeat:3,
54 | autoreverse:true,
55 | duration:100,
56 | curve:Titanium.UI.ANIMATION_CURVE_EASE_IN_OUT
57 | });
58 | }
59 |
60 |
61 |
62 |
63 | win.addEventListener('click', function(_ev) {
64 | make_blob( win.player, _ev.globalPoint);
65 | connection.write(JSON.stringify({coords:_ev.globalPoint,player:win.player}));
66 | })
67 |
68 |
69 |
70 |
71 |
72 | win.addEventListener('close', function(e) {
73 | connection.stop();
74 | });
--------------------------------------------------------------------------------
/Resources/bj.js:
--------------------------------------------------------------------------------
1 | // © Dan Tamas - http://dan-tamas.me
2 | // More tutorials on http://cssgallery.info/category/titanium-appcelerator/
3 | // This code is MIT licensed.
4 |
5 |
6 |
7 | var bjnet = function(name,fn_receive) {
8 |
9 | var services = null;
10 |
11 |
12 | var bonjourSocket = Titanium.Network.createTCPSocket({
13 | hostName:Titanium.Network.INADDR_ANY,
14 | port:40401,
15 | mode:Titanium.Network.READ_WRITE_MODE
16 | });
17 |
18 | // bonjourSocket.addEventListener('read', function(_ev) {
19 | // DO WE NEED THIS ?
20 | // )};
21 |
22 | var localService = Titanium.Network.createBonjourService({
23 | name:name,
24 | type:'_utest._tcp',
25 | domain:'local.'
26 | });
27 |
28 | // Searcher for finding other services
29 | var serviceBrowser = Titanium.Network.createBonjourBrowser({
30 | serviceType:'_utest._tcp',
31 | domain:'local.'
32 | });
33 |
34 | var update_services = function(e) {
35 |
36 | Titanium.API.info(JSON.stringify(e));
37 | services = e['services'];
38 |
39 | for (var i=0; i < services.length; i++) {
40 | var service = services[i];
41 |
42 | if ( (service.name != name) && (service.socket == null || !service.socket.isValid) ) {
43 | service.resolve();
44 | service.socket.addEventListener('read', function(x) {
45 | fn_receive(x['data'].text);
46 | });
47 | service.socket.connect();
48 | }
49 |
50 | }
51 |
52 | };
53 |
54 | serviceBrowser.addEventListener('updatedServices', update_services);
55 |
56 |
57 | return {
58 | start: function(){
59 | bonjourSocket.listen();
60 |
61 | try
62 | {
63 | localService.publish(bonjourSocket);
64 | serviceBrowser.search();
65 | }
66 | catch (e) {
67 | Titanium.API.info( JSON.stringify(e) );
68 | }
69 | },
70 | write: function(data) {
71 | bonjourSocket.write(data);
72 | },
73 | stop: function(){
74 | if (serviceBrowser.isSearching) {
75 | serviceBrowser.stopSearch();
76 | }
77 | Titanium.API.info('Stopped search...');
78 | localService.stop();
79 | Titanium.API.info('Stopped service...');
80 | if (bonjourSocket.isValid) {
81 | bonjourSocket.close();
82 | }
83 | Titanium.API.info('Closed socket...');
84 | for (var i=0; i < services.length; i++) {
85 | var service = services[i];
86 | if (service.socket.isValid) {
87 | service.socket.close();
88 | }
89 | Titanium.API.info('Closed socket to service '+service.name+"...");
90 | }
91 | }
92 | }
93 |
94 | };
95 |
--------------------------------------------------------------------------------
/Resources/app.js:
--------------------------------------------------------------------------------
1 | // © Dan Tamas - http://dan-tamas.me
2 | // More tutorials on http://cssgallery.info/category/titanium-appcelerator/
3 | // This code is MIT licensed.
4 |
5 |
6 |
7 | // this sets the background color of the master UIView (when there are no windows/tab groups on it)
8 | Titanium.UI.setBackgroundColor('#000');
9 |
10 | Titanium.include('bj.js');
11 |
12 | var win = Titanium.UI.createWindow({
13 | backgroundColor:'#000',
14 | layout:'vertical'
15 | });
16 |
17 |
18 | win.add( Titanium.UI.createLabel({
19 | text:'Choose your weapon!',
20 | color:'#fff',
21 | textAlign:'center',
22 | font:{
23 | fontWeight:'bold',
24 | fontSize:28
25 | },
26 | height:40,
27 | top:0
28 | }));
29 |
30 |
31 | var red = Titanium.UI.createView({
32 | top:33,
33 | height:100,
34 | width:100,
35 | backgroundColor:'#f00',
36 | backgroundGradient:{
37 | type:'radial',
38 | colors:['#f99','#f00'],
39 | startPoint:{x:33,y:33},
40 | endPoint:{x:33,y:33},
41 | backFillStart:true
42 | },
43 | borderRadius:50,
44 | borderColor:'#fff',
45 | borderWidth:2,
46 | player:{
47 | name:'red',
48 | color:'#f00'
49 | }
50 | });
51 |
52 |
53 |
54 | var green = Titanium.UI.createView({
55 | top:33,
56 | height:100,
57 | width:100,
58 | backgroundColor:'#0f0',
59 | backgroundGradient:{
60 | type:'radial',
61 | colors:['#9f9','#0f0'],
62 | startPoint:{x:33,y:33},
63 | endPoint:{x:33,y:33},
64 | backFillStart:true
65 | },
66 | borderRadius:50,
67 | borderColor:'#fff',
68 | borderWidth:2,
69 | player:{
70 | name:'green',
71 | color:'#0f0'
72 | }
73 | });
74 |
75 |
76 | var blue = Titanium.UI.createView({
77 | top:33,
78 | height:100,
79 | width:100,
80 | backgroundColor:'#00f',
81 | backgroundGradient:{
82 | type:'radial',
83 | colors:['#99f','#00f'],
84 | startPoint:{x:33,y:33},
85 | endPoint:{x:33,y:33},
86 | backFillStart:true
87 | },
88 | borderRadius:50,
89 | borderColor:'#fff',
90 | borderWidth:2,
91 | player:{
92 | name:'blue',
93 | color:'#00f'
94 | }
95 | });
96 |
97 | win.add(red);
98 | win.add(green);
99 | win.add(blue);
100 |
101 | win.open();
102 |
103 |
104 | var play_win = Titanium.UI.createWindow({
105 | url:'play.js',
106 | width:320,
107 | height:480,
108 | backgroundColor:'#000'
109 | });
110 |
111 |
112 | var tr = Titanium.UI.create2DMatrix();
113 | tr = tr.scale(1.5);
114 |
115 |
116 | function make_blob(player,coords) {
117 | var the_blob = Titanium.UI.createView({
118 | center:coords,
119 | height:30,
120 | width:30,
121 | backgroundColor:player.color,
122 | backgroundGradient:{
123 | type:'radial',
124 | colors:[player.color.replace(/0/g,9),player.color],
125 | startPoint:{x:10,y:10},
126 | endPoint:{x:10,y:10},
127 | backFillStart:true
128 | },
129 | borderRadius:15,
130 | borderColor:'#fff',
131 | borderWidth:1
132 | });
133 |
134 | win.add(the_blob);
135 |
136 | the_blob.animate({
137 | transform:tr,
138 | repeat:3,
139 | autoreverse:true,
140 | duration:100,
141 | curve:Titanium.UI.ANIMATION_CURVE_EASE_IN_OUT
142 | });
143 | }
144 |
145 |
146 |
147 | win.addEventListener('click', function(_ev) {
148 | if ( _ev.source.player ){
149 | play_win.player = _ev.source.player;
150 | play_win.open({transition:Titanium.UI.iPhone.AnimationStyle.FLIP_FROM_LEFT});
151 | }
152 | });
153 |
154 |
155 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2009 Appcelerator, Inc.
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | (or the full text of the license is below)
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 |
17 |
18 |
19 | Apache License
20 | Version 2.0, January 2004
21 | http://www.apache.org/licenses/
22 |
23 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
24 |
25 | 1. Definitions.
26 |
27 | "License" shall mean the terms and conditions for use, reproduction,
28 | and distribution as defined by Sections 1 through 9 of this document.
29 |
30 | "Licensor" shall mean the copyright owner or entity authorized by
31 | the copyright owner that is granting the License.
32 |
33 | "Legal Entity" shall mean the union of the acting entity and all
34 | other entities that control, are controlled by, or are under common
35 | control with that entity. For the purposes of this definition,
36 | "control" means (i) the power, direct or indirect, to cause the
37 | direction or management of such entity, whether by contract or
38 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
39 | outstanding shares, or (iii) beneficial ownership of such entity.
40 |
41 | "You" (or "Your") shall mean an individual or Legal Entity
42 | exercising permissions granted by this License.
43 |
44 | "Source" form shall mean the preferred form for making modifications,
45 | including but not limited to software source code, documentation
46 | source, and configuration files.
47 |
48 | "Object" form shall mean any form resulting from mechanical
49 | transformation or translation of a Source form, including but
50 | not limited to compiled object code, generated documentation,
51 | and conversions to other media types.
52 |
53 | "Work" shall mean the work of authorship, whether in Source or
54 | Object form, made available under the License, as indicated by a
55 | copyright notice that is included in or attached to the work
56 | (an example is provided in the Appendix below).
57 |
58 | "Derivative Works" shall mean any work, whether in Source or Object
59 | form, that is based on (or derived from) the Work and for which the
60 | editorial revisions, annotations, elaborations, or other modifications
61 | represent, as a whole, an original work of authorship. For the purposes
62 | of this License, Derivative Works shall not include works that remain
63 | separable from, or merely link (or bind by name) to the interfaces of,
64 | the Work and Derivative Works thereof.
65 |
66 | "Contribution" shall mean any work of authorship, including
67 | the original version of the Work and any modifications or additions
68 | to that Work or Derivative Works thereof, that is intentionally
69 | submitted to Licensor for inclusion in the Work by the copyright owner
70 | or by an individual or Legal Entity authorized to submit on behalf of
71 | the copyright owner. For the purposes of this definition, "submitted"
72 | means any form of electronic, verbal, or written communication sent
73 | to the Licensor or its representatives, including but not limited to
74 | communication on electronic mailing lists, source code control systems,
75 | and issue tracking systems that are managed by, or on behalf of, the
76 | Licensor for the purpose of discussing and improving the Work, but
77 | excluding communication that is conspicuously marked or otherwise
78 | designated in writing by the copyright owner as "Not a Contribution."
79 |
80 | "Contributor" shall mean Licensor and any individual or Legal Entity
81 | on behalf of whom a Contribution has been received by Licensor and
82 | subsequently incorporated within the Work.
83 |
84 | 2. Grant of Copyright License. Subject to the terms and conditions of
85 | this License, each Contributor hereby grants to You a perpetual,
86 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
87 | copyright license to reproduce, prepare Derivative Works of,
88 | publicly display, publicly perform, sublicense, and distribute the
89 | Work and such Derivative Works in Source or Object form.
90 |
91 | 3. Grant of Patent License. Subject to the terms and conditions of
92 | this License, each Contributor hereby grants to You a perpetual,
93 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
94 | (except as stated in this section) patent license to make, have made,
95 | use, offer to sell, sell, import, and otherwise transfer the Work,
96 | where such license applies only to those patent claims licensable
97 | by such Contributor that are necessarily infringed by their
98 | Contribution(s) alone or by combination of their Contribution(s)
99 | with the Work to which such Contribution(s) was submitted. If You
100 | institute patent litigation against any entity (including a
101 | cross-claim or counterclaim in a lawsuit) alleging that the Work
102 | or a Contribution incorporated within the Work constitutes direct
103 | or contributory patent infringement, then any patent licenses
104 | granted to You under this License for that Work shall terminate
105 | as of the date such litigation is filed.
106 |
107 | 4. Redistribution. You may reproduce and distribute copies of the
108 | Work or Derivative Works thereof in any medium, with or without
109 | modifications, and in Source or Object form, provided that You
110 | meet the following conditions:
111 |
112 | (a) You must give any other recipients of the Work or
113 | Derivative Works a copy of this License; and
114 |
115 | (b) You must cause any modified files to carry prominent notices
116 | stating that You changed the files; and
117 |
118 | (c) You must retain, in the Source form of any Derivative Works
119 | that You distribute, all copyright, patent, trademark, and
120 | attribution notices from the Source form of the Work,
121 | excluding those notices that do not pertain to any part of
122 | the Derivative Works; and
123 |
124 | (d) If the Work includes a "NOTICE" text file as part of its
125 | distribution, then any Derivative Works that You distribute must
126 | include a readable copy of the attribution notices contained
127 | within such NOTICE file, excluding those notices that do not
128 | pertain to any part of the Derivative Works, in at least one
129 | of the following places: within a NOTICE text file distributed
130 | as part of the Derivative Works; within the Source form or
131 | documentation, if provided along with the Derivative Works; or,
132 | within a display generated by the Derivative Works, if and
133 | wherever such third-party notices normally appear. The contents
134 | of the NOTICE file are for informational purposes only and
135 | do not modify the License. You may add Your own attribution
136 | notices within Derivative Works that You distribute, alongside
137 | or as an addendum to the NOTICE text from the Work, provided
138 | that such additional attribution notices cannot be construed
139 | as modifying the License.
140 |
141 | You may add Your own copyright statement to Your modifications and
142 | may provide additional or different license terms and conditions
143 | for use, reproduction, or distribution of Your modifications, or
144 | for any such Derivative Works as a whole, provided Your use,
145 | reproduction, and distribution of the Work otherwise complies with
146 | the conditions stated in this License.
147 |
148 | 5. Submission of Contributions. Unless You explicitly state otherwise,
149 | any Contribution intentionally submitted for inclusion in the Work
150 | by You to the Licensor shall be under the terms and conditions of
151 | this License, without any additional terms or conditions.
152 | Notwithstanding the above, nothing herein shall supersede or modify
153 | the terms of any separate license agreement you may have executed
154 | with Licensor regarding such Contributions.
155 |
156 | 6. Trademarks. This License does not grant permission to use the trade
157 | names, trademarks, service marks, or product names of the Licensor,
158 | except as required for reasonable and customary use in describing the
159 | origin of the Work and reproducing the content of the NOTICE file.
160 |
161 | 7. Disclaimer of Warranty. Unless required by applicable law or
162 | agreed to in writing, Licensor provides the Work (and each
163 | Contributor provides its Contributions) on an "AS IS" BASIS,
164 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
165 | implied, including, without limitation, any warranties or conditions
166 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
167 | PARTICULAR PURPOSE. You are solely responsible for determining the
168 | appropriateness of using or redistributing the Work and assume any
169 | risks associated with Your exercise of permissions under this License.
170 |
171 | 8. Limitation of Liability. In no event and under no legal theory,
172 | whether in tort (including negligence), contract, or otherwise,
173 | unless required by applicable law (such as deliberate and grossly
174 | negligent acts) or agreed to in writing, shall any Contributor be
175 | liable to You for damages, including any direct, indirect, special,
176 | incidental, or consequential damages of any character arising as a
177 | result of this License or out of the use or inability to use the
178 | Work (including but not limited to damages for loss of goodwill,
179 | work stoppage, computer failure or malfunction, or any and all
180 | other commercial damages or losses), even if such Contributor
181 | has been advised of the possibility of such damages.
182 |
183 | 9. Accepting Warranty or Additional Liability. While redistributing
184 | the Work or Derivative Works thereof, You may choose to offer,
185 | and charge a fee for, acceptance of support, warranty, indemnity,
186 | or other liability obligations and/or rights consistent with this
187 | License. However, in accepting such obligations, You may act only
188 | on Your own behalf and on Your sole responsibility, not on behalf
189 | of any other Contributor, and only if You agree to indemnify,
190 | defend, and hold each Contributor harmless for any liability
191 | incurred by, or claims asserted against, such Contributor by reason
192 | of your accepting any such warranty or additional liability.
193 |
194 | END OF TERMS AND CONDITIONS
195 |
196 | APPENDIX: How to apply the Apache License to your work.
197 |
198 | To apply the Apache License to your work, attach the following
199 | boilerplate notice, with the fields enclosed by brackets "[]"
200 | replaced with your own identifying information. (Don't include
201 | the brackets!) The text should be enclosed in the appropriate
202 | comment syntax for the file format. We also recommend that a
203 | file or class name and description of purpose be included on the
204 | same "printed page" as the copyright notice for easier
205 | identification within third-party archives.
206 |
207 | Copyright [yyyy] [name of copyright owner]
208 |
209 | Licensed under the Apache License, Version 2.0 (the "License");
210 | you may not use this file except in compliance with the License.
211 | You may obtain a copy of the License at
212 |
213 | http://www.apache.org/licenses/LICENSE-2.0
214 |
215 | Unless required by applicable law or agreed to in writing, software
216 | distributed under the License is distributed on an "AS IS" BASIS,
217 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
218 | See the License for the specific language governing permissions and
219 | limitations under the License.
--------------------------------------------------------------------------------