| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | 
							- /* -*- mode:c; c-file-style:"k&r"; c-basic-offset: 4; tab-width:4; indent-tabs-mode:nil; mode:auto-fill; fill-column:78; -*- */
 
- /* vim: set ts=4 sw=4 et tw=78 fo=cqt wm=0: */
 
- /* This Hello World demostrate a simple multithread program */
 
- #include "pal.h"
 
- #include "pal_debug.h"
 
- #include "api.h"
 
- int main (int argc, char ** argv)
 
- {
 
-     PAL_HANDLE handles[3];
 
-     if (argc == 2 && !memcmp(argv[1], "Child", 6)) {
 
-         for (int i = 0 ; i < 3 ; i++) {
 
-             handles[i] = DkReceiveHandle(pal_control.parent_process);
 
-             if (handles[i])
 
-                 pal_printf("Receive Handle OK\n");
 
-         }
 
-         char buffer[20];
 
-         for (int i = 0 ; i < 3 ; i++) {
 
-             if (!handles[i])
 
-                 continue;
 
-             memset(buffer, 0, 20);
 
-             switch(PAL_GET_TYPE(handles[i])) {
 
-                 case pal_type_pipesrv: {
 
-                     PAL_HANDLE pipe = DkStreamWaitForClient(handles[i]);
 
-                     if (pipe) {
 
-                         if (DkStreamRead(pipe, 0, 20, buffer, NULL, 0))
 
-                             pal_printf("Receive Pipe Handle: %s\n", buffer);
 
-                         DkObjectClose(pipe);
 
-                     }
 
-                     break;
 
-                 }
 
-                 case pal_type_udpsrv: {
 
-                     char uri[20];
 
-                     if ((DkStreamRead(handles[i], 0, 20, buffer, &uri, 20)))
 
-                         pal_printf("Receive Socket Handle: %s\n", buffer);
 
-                     break;
 
-                 }
 
-                 case pal_type_file:
 
-                     if (DkStreamRead(handles[i], 0, 20, buffer, NULL, 0))
 
-                         pal_printf("Receive File Handle: %s\n", buffer);
 
-                     break;
 
-                 default:
 
-                     break;
 
-             }
 
-             DkObjectClose(handles[i]);
 
-         }
 
-     } else {
 
-         const char *args[3] = { "SendHandle", "Child", NULL };
 
-         PAL_HANDLE child = DkProcessCreate("file:SendHandle", 0, args);
 
-         if (child) {
 
-             // Sending pipe handle
 
-             handles[0] = DkStreamOpen("pipe.srv:1", PAL_ACCESS_RDWR,
 
-                                       0, PAL_CREAT_TRY, 0);
 
-             if (handles[0]) {
 
-                 pal_printf("Send Handle OK\n");
 
-                 if (DkSendHandle(child, handles[0])) {
 
-                     DkObjectClose(handles[0]);
 
-                     PAL_HANDLE pipe = DkStreamOpen("pipe:1", PAL_ACCESS_RDWR,
 
-                                                    0, 0, 0);
 
-                     if (pipe) {
 
-                         DkStreamWrite(pipe, 0, 20, "Hello World", NULL);
 
-                         DkObjectClose(pipe);
 
-                     }
 
-                 } else {
 
-                     DkObjectClose(handles[0]);
 
-                 }
 
-             }
 
-             // Sending udp handle
 
-             handles[1] = DkStreamOpen("udp.srv:127.0.0.1:8000", PAL_ACCESS_RDWR,
 
-                                       0, PAL_CREAT_TRY, 0);
 
-             if (handles[1]) {
 
-                 pal_printf("Send Handle OK\n");
 
-                 if (DkSendHandle(child, handles[1])) {
 
-                     DkObjectClose(handles[1]);
 
-                     PAL_HANDLE socket = DkStreamOpen("udp:127.0.0.1:8000",
 
-                                                      PAL_ACCESS_RDWR, 0, 0, 0);
 
-                     if (socket) {
 
-                         DkStreamWrite(socket, 0, 20, "Hello World", NULL);
 
-                         DkObjectClose(socket);
 
-                     }
 
-                 } else {
 
-                     DkObjectClose(handles[1]);
 
-                 }
 
-             }
 
-             handles[2] = DkStreamOpen("file:to_send.tmp", PAL_ACCESS_RDWR,
 
-                                       0600, PAL_CREAT_TRY, 0);
 
-             if (handles[2]) {
 
-                 pal_printf("Send Handle OK\n");
 
-                 DkStreamWrite(handles[2], 0, 20, "Hello World", NULL);
 
-                 DkStreamSetLength(handles[2], 4096);
 
-                 DkSendHandle(child, handles[2]);
 
-                 DkObjectClose(handles[2]);
 
-             }
 
-         }
 
-         DkObjectClose(child);
 
-     }
 
-     return 0;
 
- }
 
 
  |