// File: mh0fm4[P]SCDC/test/demos/multi/multi_srv.c
// Function: main
int main(int argc, char *argv[])
{
  /* scdc.log_init("log_FILE", sys.stdout, sys.stderr)*/

  scdc_init(SCDC_INIT_DEFAULT);

  scdc_dataprov_t dp_hook = scdc_dataprov_open(MULTI_BASE, "hook", &multidemo_hook);

  scdc_nodeport_t np = SCDC_NODEPORT_NULL;

  if (argc <= 1)
  {
    MULTI_TRACE("setup: none");

  } else if (strcmp(argv[1], "uds") == 0)
  {
    MULTI_TRACE("setup: UDS");

    const char *socketname = (argc <= 2)?"multi":argv[2];

    np = scdc_nodeport_open("uds:socketname:max_connections", socketname, 2);

  } else if (strcmp(argv[1], "tcp") == 0)
  {
    MULTI_TRACE("setup: TCP");

    np = scdc_nodeport_open("tcp:max_connections", 2);

  } else if (strcmp(argv[1], "mpi") == 0)
  {
    MULTI_TRACE("setup: MPI");

    np = scdc_nodeport_open("mpi");

  } else MULTI_TRACE("unknown mode: %s", argv[1]);

  MULTI_TRACE("start");
  scdc_nodeport_start(np, SCDC_NODEPORT_START_ASYNC_UNTIL_CANCEL);

  printf("Press <ENTER> to quit!\n");
  getchar();

  MULTI_TRACE("stop");
  scdc_nodeport_stop(np);

  MULTI_TRACE("release");
  scdc_nodeport_close(np);

  scdc_dataprov_close(dp_hook);

  scdc_release();

  /*scdc.log_release()*/

  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq 0x7bf17(%rip), %rdi     # 0x89724
movb $0x0, %al
callq 0xdda0
leaq 0x7b7e9(%rip), %rdi     # 0x89004
leaq 0x7e0fe(%rip), %rsi     # 0x8b920
leaq 0xa32f7(%rip), %rdx     # 0xb0b20
movb $0x0, %al
callq 0xe2d0
movq %rax, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
cmpl $0x1, -0x8(%rbp)
jg 0xd865
jmp 0xd844
leaq 0x7b7c0(%rip), %rdi     # 0x8900b
movb $0x0, %al
callq 0xcd10
leaq 0x7b8b5(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
jmp 0xd9ac
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x7d314(%rip), %rsi     # 0x8ab88
callq 0xc960
cmpl $0x0, %eax
jne 0xd8e3
jmp 0xd880
leaq 0x7b7a2(%rip), %rdi     # 0x89029
movb $0x0, %al
callq 0xcd10
leaq 0x7b879(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
cmpl $0x2, -0x8(%rbp)
jg 0xd8af
leaq 0x7b79d(%rip), %rax     # 0x89046
movq %rax, -0x30(%rbp)
jmp 0xd8bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rsi
leaq 0x7b77e(%rip), %rdi     # 0x8904c
movl $0x2, %edx
movb $0x0, %al
callq 0xe510
movq %rax, -0x20(%rbp)
jmp 0xd9aa
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x7d28d(%rip), %rsi     # 0x8ab7f
callq 0xc960
cmpl $0x0, %eax
jne 0xd933
jmp 0xd8fe
leaq 0x7b766(%rip), %rdi     # 0x8906b
movb $0x0, %al
callq 0xcd10
leaq 0x7b7fb(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
leaq 0x7b767(%rip), %rdi     # 0x89088
movl $0x2, %esi
movb $0x0, %al
callq 0xe510
movq %rax, -0x20(%rbp)
jmp 0xd9a8
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x7b75a(%rip), %rsi     # 0x8909c
callq 0xc960
cmpl $0x0, %eax
jne 0xd97e
jmp 0xd94e
leaq 0x7b74b(%rip), %rdi     # 0x890a0
movb $0x0, %al
callq 0xcd10
leaq 0x7b7ab(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
leaq 0x7b72b(%rip), %rdi     # 0x8909c
movb $0x0, %al
callq 0xe510
movq %rax, -0x20(%rbp)
jmp 0xd9a6
jmp 0xd980
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x7b72e(%rip), %rdi     # 0x890bd
movb $0x0, %al
callq 0xcd10
leaq 0x7b771(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
jmp 0xd9a6
jmp 0xd9a8
jmp 0xd9aa
jmp 0xd9ac
jmp 0xd9ae
leaq 0x7b72b(%rip), %rdi     # 0x890e0
movb $0x0, %al
callq 0xcd10
leaq 0x7b74b(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
movq -0x20(%rbp), %rdi
movl $0x4, %esi
callq 0xe620
leaq 0x7b719(%rip), %rdi     # 0x890f8
movb $0x0, %al
callq 0xcd10
callq 0xc950
leaq 0x7b71e(%rip), %rdi     # 0x89110
movb $0x0, %al
callq 0xcd10
leaq 0x7b70e(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
movq -0x20(%rbp), %rdi
callq 0xe680
leaq 0x7b710(%rip), %rdi     # 0x89127
movb $0x0, %al
callq 0xcd10
leaq 0x7b6e9(%rip), %rdi     # 0x8910e
movb $0x0, %al
callq 0xcd10
movq -0x20(%rbp), %rdi
callq 0xe5e0
movq -0x18(%rbp), %rdi
callq 0xe3a0
callq 0xdf50
xorl %eax, %eax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)