#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/neutrino.h>
#include <process.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char *pnum = argv[2];
    char pname[10];
    sprintf(pname, "P%s1", pnum);
    printf("%s running\n", pname);

    int parentChid = atoi(argv[1]);

    int connectionId = ConnectAttach(0, getppid(), parentChid, _NTO_SIDE_CHANNEL, 0);
    if (connectionId == -1) {
        printf("%s connection error\n", pname);
        exit(EXIT_FAILURE);
    }

    int replyMsg1[2];
    char msg[512];
    sprintf(msg, "%s sending request", pname);
    if (MsgSend(connectionId, msg, strlen(msg) + 1, replyMsg1, sizeof(replyMsg1)) == -1) {
        printf("%s msg send error\n", pname);
        exit(EXIT_FAILURE);
    }
    if (replyMsg1 != NULL) {
        printf("%s server responded with P1 chid = %d and P1 pid = %d\n", pname, replyMsg1[0], replyMsg1[1]);
    }

    connectionId = ConnectAttach(0, replyMsg1[1], replyMsg1[0], _NTO_SIDE_CHANNEL, 0);
    if (connectionId == -1) {
        printf("%s connection error\n", pname);
        exit(EXIT_FAILURE);
    }

    char replyMsg2[512];
    sprintf(msg, "%s loaded", pname);
    if (MsgSend(connectionId, msg, strlen(msg) + 1, replyMsg2, sizeof(replyMsg2)) == -1) {
        printf("%s msg send error\n", pname);
        exit(EXIT_FAILURE);
    }
    if (replyMsg2 != NULL)
        printf("%s OK\n", pname);

    return EXIT_SUCCESS;
}
