forked from cory/tildefriends
		
	git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3157 ed5197a5-7fde-0310-b194-c3ffbd925b24
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| = SandboxOS App Development Guide =
 | |
| This is a brief introduction on developing SandboxOS apps targeted at people who are already familiar with web development.
 | |
| 
 | |
| == Packages ==
 | |
| A package is a directory of files.  '''package.json''' is the only file with special meaning.
 | |
| 
 | |
| Here is an example package.json:
 | |
| {{{
 | |
| #!json
 | |
| {
 | |
| 	"name": "chat",
 | |
| 	"start": "backend.js",
 | |
| 	"imports": ["auth", "httpd", "filesystem"],
 | |
| 	"href": "/chat",
 | |
| 	"description": "A basic multi-user chat example."
 | |
| }
 | |
| }}}
 | |
| 
 | |
|  * '''name''': identifies the package.  If it is not unique, any existing installed package of the same name will be replaced when installing the package.
 | |
|  * '''start''': specifies the JavaScript file which is the entry point of the task.  When a new process is started for this package, this script is executed within it.
 | |
|  * '''imports''': list of package/task names which this package wants to be able to access.
 | |
|  * '''href''': link to the task's entry page used by [/tasks /tasks].
 | |
|  * '''description''': human-readable description of the package, displayed by [/tasks /tasks].
 | |
| 
 | |
| == Promises ==
 | |
| 
 | |
| JavaScript promises are used heavily.  Invoking any method on another task will return a Promise object.  Execution will return immediately but go asynchronous.  That usually looks like this:
 | |
| {{{
 | |
| #!javascript
 | |
| imports.email.sendMessage(message).then(function(result) {
 | |
| 	// When sendMessage completes, result is the return value.
 | |
| }).catch(function(error) {
 | |
| 	// If sendMessage fails (or calling it somehow fails), error is the reason.
 | |
| });
 | |
| // sendMessage returns immediately and execution continues on.
 | |
| }}}
 | |
| 
 | |
| This is a completely inadequate explanation of the nuances involved, but it's a starting point.  Promises can be created and chained and combined in interesting ways.
 | |
| 
 | |
| == Inter-Task Communication ==
 | |
| Tasks have access to the exported functions on any task declared in their package imports.
 | |
| 
 | |
| In addition, functions passed between tasks can be called by the receiving task or passed along further.
 | |
| 
 | |
| Here is an untested, made-up example with two hypothetical tasks, '''math''' and '''test''':
 | |
| 
 | |
| '''math.js''':
 | |
| {{{
 | |
| #!javascript
 | |
| exports = {
 | |
| 	sum: function(a, b) { return a + b; },
 | |
| 	multiply: function(a, b) { return a * b; },
 | |
| };
 | |
| }}}
 | |
| 
 | |
| '''test.js''':
 | |
| {{{
 | |
| #!javascript
 | |
| imports.math.sum(4, 5).then(function(result) {
 | |
| 	// result === 9
 | |
| });
 | |
| }}} |