home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextLibrary / Documentation / NextDev / Examples / MiG / Server / add_server_main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-27  |  2.1 KB  |  75 lines

  1. /* add_server_main.c:  Main loop and implementation of add server */
  2.  
  3. #import <mach.h>
  4. #import <sys/message.h>
  5. #import "../Library/add_types.h"
  6.  
  7. void         server_loop(port_t port);
  8. /* defined by MiG: */
  9. boolean_t    add_server(msg_header_t *in, msg_header_t *out);
  10.  
  11. /* from Request types in addUser.c */
  12. struct message {                
  13.     msg_header_t    head;        /* standard header field */
  14.     msg_type_t      arg1_type;   /* first arg type */
  15.     int             arg1;        /* first arg */
  16.     msg_type_t      arg2_type;   /* second arg type */
  17.     int             arg2;        /* second arg */
  18. };
  19.  
  20. main()
  21. {
  22.     port_t        server_port;
  23.     kern_return_t r;
  24.     
  25.     /* Register with the Network Name Server. */
  26.     r = port_allocate(task_self(), &server_port);
  27.     if (r != KERN_SUCCESS) {
  28.         mach_error("port_allocate failed", r);
  29.         exit(1);
  30.     }
  31.     r = netname_check_in(name_server_port, ADD_SERVER_NAME, 
  32.         PORT_NULL, server_port);
  33.     if (r != KERN_SUCCESS) {
  34.         mach_error("netname_check_in failed", r);
  35.         exit(1);
  36.     }
  37.         
  38.     /* Enter our main loop. */
  39.     server_loop(server_port);
  40. }
  41.  
  42. void server_loop(port_t port)
  43. {
  44.     struct message   msg, reply;
  45.     kern_return_t    ret;
  46.         
  47.     while (TRUE)
  48.     {        
  49.         /* Receive a request from a client. */
  50.         msg.head.msg_local_port = port;
  51.         msg.head.msg_size = sizeof(struct message);
  52.         ret = msg_receive(&msg.head, MSG_OPTION_NONE, 0);
  53.         if (ret != RCV_SUCCESS) /* ignore errors */; 
  54.  
  55.         /* Feed the request into the server. */
  56.         (void)add_server((msg_header_t *)&msg, (msg_header_t *)&reply);
  57.  
  58.         /* Send a reply to the client. */
  59.         reply.head.msg_local_port = port;
  60.         ret = msg_send(&reply.head, MSG_OPTION_NONE, 0);
  61.         if (ret != SEND_SUCCESS) /* ignore errors */; 
  62.     }
  63. }
  64.  
  65. /* 
  66.  * This function is called by add_server, which was created by MiG.
  67.  * It is NOT directly called by any client process.
  68.  */
  69. kern_return_t add2nums(port_t server, int n1, int n2, int *n3)
  70. {
  71.     *n3 = n1+n2;
  72.     return KERN_SUCCESS;
  73. }
  74.          
  75.