-- fortytwoClientImpl.mesa
-- Please do not edit this file.
-- It was generated using CedarRPCGen.

DIRECTORY
  Rope,
  SunRPC,
  SunRPCAuth,
  fortyone,
  fourtwo,
  fourtwoGetPut,
  fortytwoGetPut,
  fortytwo;

fortytwoClientImpl: CEDAR PROGRAM
  IMPORTS SunRPC, fourtwoGetPut, fortytwoGetPut
  EXPORTS fortytwo =
BEGIN
ROPE: TYPE = Rope.ROPE;

defaultTimeout: CARDINAL ← 2000;
defaultRetries: CARDINAL ← 5;

MakeFORTYTWOPROG1Client: PUBLIC PROC [h: SunRPC.Handle,
	c: SunRPCAuth.Conversation] RETURNS [fortytwo.FORTYTWOPROG1] ~ {
  RETURN [NEW[fortytwo.FORTYTWOPROG1Object ← [
	getanswer1,
	gettrueanswer1,
	getbogusanswer1,
	dontanswer1,
	h, c, NIL]]];
  };


getanswer1: PROC[o: fortytwo.FORTYTWOPROG1,
                theQuestion: ROPE,
                aRandomNumber: CARD16,
                anotherQuestion: REF TEXT]
		RETURNS [res: fourtwo.answerRec] = {
    SunRPC.StartCall[o.rpcHandle, o.rpcConversation,
                   fortytwo.FORTYTWOPROG, 1, 1];
    SunRPC.PutRope[o.rpcHandle, theQuestion];
    SunRPC.PutCard32[o.rpcHandle, aRandomNumber];
    SunRPC.PutRefText[o.rpcHandle, anotherQuestion];
    [] ← SunRPC.SendCallAndReceiveReply[o.rpcHandle, defaultTimeout, defaultRetries];
    res ← fourtwoGetPut.GetanswerRec[o.rpcHandle];
    SunRPC.ReleaseReply[o.rpcHandle];
  };

gettrueanswer1: PROC[o: fortytwo.FORTYTWOPROG1,
                questionType: fortytwo.QuestionType,
                randomNumbers: fortytwo.SeqType0]
		RETURNS [res: fortytwo.trueAnswerRec] = {
    SunRPC.StartCall[o.rpcHandle, o.rpcConversation,
                   fortytwo.FORTYTWOPROG, 1, 2];
    fortytwoGetPut.PutQuestionType[o.rpcHandle, questionType];
    SunRPC.PutInt32[o.rpcHandle, randomNumbers.size];
    FOR i: INT IN [0..randomNumbers.size) DO
      SunRPC.PutInt32[o.rpcHandle, randomNumbers[i]];
      ENDLOOP;
    [] ← SunRPC.SendCallAndReceiveReply[o.rpcHandle, defaultTimeout, defaultRetries];
    res ← fortytwoGetPut.GettrueAnswerRec[o.rpcHandle];
    SunRPC.ReleaseReply[o.rpcHandle];
  };

getbogusanswer1: PROC[o: fortytwo.FORTYTWOPROG1]
		RETURNS [res: INT32] = {
    SunRPC.StartCall[o.rpcHandle, o.rpcConversation,
                   fortytwo.FORTYTWOPROG, 1, 3];
    [] ← SunRPC.SendCallAndReceiveReply[o.rpcHandle, defaultTimeout, defaultRetries];
    res ← SunRPC.GetInt32[o.rpcHandle];
    SunRPC.ReleaseReply[o.rpcHandle];
  };

dontanswer1: PROC[o: fortytwo.FORTYTWOPROG1, in: INT32] = {
    SunRPC.StartCall[o.rpcHandle, o.rpcConversation,
                   fortytwo.FORTYTWOPROG, 1, 4];
    SunRPC.PutInt32[o.rpcHandle,in];
    [] ← SunRPC.SendCallAndReceiveReply[o.rpcHandle, defaultTimeout, defaultRetries];
    SunRPC.ReleaseReply[o.rpcHandle];
  };
MakeFORTYTWOPROG2Client: PUBLIC PROC [h: SunRPC.Handle,
	c: SunRPCAuth.Conversation] RETURNS [fortytwo.FORTYTWOPROG2] ~ {
  RETURN [NEW[fortytwo.FORTYTWOPROG2Object ← [
	gettheanswer2,
	h, c, NIL]]];
  };


gettheanswer2: PROC[o: fortytwo.FORTYTWOPROG2,
                questionType: fortytwo.QuestionType,
                randomNumbers: fortytwo.SeqType0]
		RETURNS [res: fortytwo.AnswerRec] = {
    SunRPC.StartCall[o.rpcHandle, o.rpcConversation,
                   fortytwo.FORTYTWOPROG, 2, 1];
    fortytwoGetPut.PutQuestionType[o.rpcHandle, questionType];
    SunRPC.PutInt32[o.rpcHandle, randomNumbers.size];
    FOR i: INT IN [0..randomNumbers.size) DO
      SunRPC.PutInt32[o.rpcHandle, randomNumbers[i]];
      ENDLOOP;
    [] ← SunRPC.SendCallAndReceiveReply[o.rpcHandle, defaultTimeout, defaultRetries];
    res ← fortytwoGetPut.GetAnswerRec[o.rpcHandle];
    SunRPC.ReleaseReply[o.rpcHandle];
  };
MakeTESTTYPESPROG3Client: PUBLIC PROC [h: SunRPC.Handle,
	c: SunRPCAuth.Conversation] RETURNS [fortytwo.TESTTYPESPROG3] ~ {
  RETURN [NEW[fortytwo.TESTTYPESPROG3Object ← [
	dotest3,
	h, c, NIL]]];
  };


dotest3: PROC[o: fortytwo.TESTTYPESPROG3,
                a: REAL,
                b: DREAL,
                c: BYTE,
                d: INT16,
                e: INT32,
                f: INT32,
                g: BYTE,
                h: CARD16,
                i: CARD32,
                j: CARD32,
                k: fortytwo.SeqType2,
                l: PACKED ARRAY [0..3) OF BYTE,
                m: fortytwo.SeqType3]
		RETURNS [res: fortytwo.randomTypes] = {
    SunRPC.StartCall[o.rpcHandle, o.rpcConversation,
                   fortytwo.TESTTYPESPROG, 3, 13];
    SunRPC.PutReal[o.rpcHandle, a];
    SunRPC.PutDReal[o.rpcHandle, b];
    SunRPC.PutInt32[o.rpcHandle, c];
    SunRPC.PutInt32[o.rpcHandle, d];
    SunRPC.PutInt32[o.rpcHandle, e];
    SunRPC.PutInt32[o.rpcHandle, f];
    SunRPC.PutInt32[o.rpcHandle, g];
    SunRPC.PutCard32[o.rpcHandle, h];
    SunRPC.PutCard32[o.rpcHandle, i];
    SunRPC.PutCard32[o.rpcHandle, j];
    SunRPC.PutInt32[o.rpcHandle, k.size];
    FOR i: INT IN [0..k.size) DO
      fortytwoGetPut.Puttuple[o.rpcHandle, k[i]];
      ENDLOOP;
    FOR i: INT IN [0..3) DO
      SunRPC.PutByte[o.rpcHandle, l[i]];
      ENDLOOP;
    SunRPC.PutAlign[o.rpcHandle];
    SunRPC.PutInt32[o.rpcHandle, m.size];
    FOR i: INT IN [0..m.size) DO
      SunRPC.PutInt32[o.rpcHandle, m[i]];
      ENDLOOP;
    [] ← SunRPC.SendCallAndReceiveReply[o.rpcHandle, defaultTimeout, defaultRetries];
    res ← fortytwoGetPut.GetrandomTypes[o.rpcHandle];
    SunRPC.ReleaseReply[o.rpcHandle];
  };
END.