-- fortytwoServerImpl.mesa
-- Please do not edit this file.
-- It was generated using CedarRPCGen.
DIRECTORY
SunRPC,
SunRPCAuth,
Rope,
fortyone,
fourtwo,
fourtwoGetPut,
fortytwoGetPut,
fortytwo;
fortytwoServerImpl: CEDAR PROGRAM
IMPORTS Rope, SunRPC, fourtwoGetPut, fortytwoGetPut
EXPORTS fortytwo =
BEGIN
ROPE: TYPE = Rope.ROPE;
Handle: TYPE = SunRPC.Handle;
Conversation: TYPE = SunRPCAuth.Conversation;
defaultReplyTTL: CARDINAL ← 10;
MakeFORTYTWOPROG1Server: PUBLIC PROC[
data: REF,
getanswer: fortytwo.getanswerProc,
gettrueanswer: fortytwo.gettrueanswerProc,
getbogusanswer: fortytwo.getbogusanswerProc,
dontanswer: fortytwo.dontanswerProc
] RETURNS [SunRPC.Server] ~ {
pseudoClient: fortytwo.FORTYTWOPROG1 ~
NEW[fortytwo.FORTYTWOPROG1Object ← [
rpcHandle ~ NIL, rpcConversation ~ NIL, data ~ data,
getanswer ~ getanswer,
gettrueanswer ~ gettrueanswer,
getbogusanswer ~ getbogusanswer,
dontanswer ~ dontanswer
]];
unbound: SunRPC.Server ~ NEW[SunRPC.ServerObject ← [
pgm ~ fortytwo.FORTYTWOPROG,
version ~ fortytwo.FORTYTWOVERS1,
clientData ~ pseudoClient,
serverProc ~ FORTYTWOPROG1Handler
]];
RETURN [unbound];
};
FORTYTWOPROG1Handler: SunRPC.ServerProc -- [h: Handle, c: Conversation, proc: CARD, clientData: REFANY
-- RETURNS [doReply: BOOLEAN, replyTimeToLive: CARDINAL] -- = {
o: fortytwo.FORTYTWOPROG1 ← NARROW[clientData];
doReply ← TRUE;
replyTimeToLive ← defaultReplyTTL;
SELECT proc FROM
1 => getanswer1[h, c, o];
2 => gettrueanswer1[h, c, o];
3 => getbogusanswer1[h, c, o];
4 => dontanswer1[h, c, o];
ENDCASE => ERROR SunRPC.Error[$wrongProc];
};
getanswer1: PROC[h: Handle, c: Conversation, o: fortytwo.FORTYTWOPROG1] = {
theQuestion: ROPE;
aRandomNumber: CARD16;
anotherQuestion: REF TEXT;
out: fourtwo.answerRec;
theQuestion ← SunRPC.GetRope[h];
aRandomNumber ← SunRPC.GetCard32[h];
anotherQuestion ← SunRPC.GetRefText[h];
out ← o.getanswer[o,
theQuestion,
aRandomNumber,
anotherQuestion];
SunRPC.StartReply[h];
fourtwoGetPut.PutanswerRec[h, out];
};
gettrueanswer1: PROC[h: Handle, c: Conversation, o: fortytwo.FORTYTWOPROG1] = {
questionType: fortytwo.QuestionType;
randomNumbers: fortytwo.SeqType0;
out: fortytwo.trueAnswerRec;
questionType ← fortytwoGetPut.GetQuestionType[h];
{
len: INT ← SunRPC.GetInt32[h];
randomNumbers ← NEW[fortytwo.SeqType0Object[len]];
FOR i: INT IN [0..len) DO
randomNumbers[i] ← SunRPC.GetInt32[h];
ENDLOOP;
};
out ← o.gettrueanswer[o,
questionType,
randomNumbers];
SunRPC.StartReply[h];
fortytwoGetPut.PuttrueAnswerRec[h, out];
};
getbogusanswer1: PROC[h: Handle, c: Conversation, o: fortytwo.FORTYTWOPROG1] = {
out: INT32;
out ← o.getbogusanswer[o];
SunRPC.StartReply[h];
SunRPC.PutInt32[h, out];
};
dontanswer1: PROC[h: Handle, c: Conversation, o: fortytwo.FORTYTWOPROG1] = {
in: INT32;
in ← SunRPC.GetInt32[h];
o.dontanswer[o, in];
SunRPC.StartReply[h];
};
MakeFORTYTWOPROG2Server: PUBLIC PROC[
data: REF,
gettheanswer: fortytwo.gettheanswerProc
] RETURNS [SunRPC.Server] ~ {
pseudoClient: fortytwo.FORTYTWOPROG2 ~
NEW[fortytwo.FORTYTWOPROG2Object ← [
rpcHandle ~ NIL, rpcConversation ~ NIL, data ~ data,
gettheanswer ~ gettheanswer
]];
unbound: SunRPC.Server ~ NEW[SunRPC.ServerObject ← [
pgm ~ fortytwo.FORTYTWOPROG,
version ~ fortytwo.FORTYTWOVERS2,
clientData ~ pseudoClient,
serverProc ~ FORTYTWOPROG2Handler
]];
RETURN [unbound];
};
FORTYTWOPROG2Handler: SunRPC.ServerProc -- [h: Handle, c: Conversation, proc: CARD, clientData: REFANY
-- RETURNS [doReply: BOOLEAN, replyTimeToLive: CARDINAL] -- = {
o: fortytwo.FORTYTWOPROG2 ← NARROW[clientData];
doReply ← TRUE;
replyTimeToLive ← defaultReplyTTL;
SELECT proc FROM
1 => gettheanswer2[h, c, o];
ENDCASE => ERROR SunRPC.Error[$wrongProc];
};
gettheanswer2: PROC[h: Handle, c: Conversation, o: fortytwo.FORTYTWOPROG2] = {
questionType: fortytwo.QuestionType;
randomNumbers: fortytwo.SeqType0;
out: fortytwo.AnswerRec;
questionType ← fortytwoGetPut.GetQuestionType[h];
{
len: INT ← SunRPC.GetInt32[h];
randomNumbers ← NEW[fortytwo.SeqType0Object[len]];
FOR i: INT IN [0..len) DO
randomNumbers[i] ← SunRPC.GetInt32[h];
ENDLOOP;
};
out ← o.gettheanswer[o,
questionType,
randomNumbers];
SunRPC.StartReply[h];
fortytwoGetPut.PutAnswerRec[h, out];
};
MakeTESTTYPESPROG3Server: PUBLIC PROC[
data: REF,
dotest: fortytwo.dotestProc
] RETURNS [SunRPC.Server] ~ {
pseudoClient: fortytwo.TESTTYPESPROG3 ~
NEW[fortytwo.TESTTYPESPROG3Object ← [
rpcHandle ~ NIL, rpcConversation ~ NIL, data ~ data,
dotest ~ dotest
]];
unbound: SunRPC.Server ~ NEW[SunRPC.ServerObject ← [
pgm ~ fortytwo.TESTTYPESPROG,
version ~ fortytwo.TESTTYPES3,
clientData ~ pseudoClient,
serverProc ~ TESTTYPESPROG3Handler
]];
RETURN [unbound];
};
TESTTYPESPROG3Handler: SunRPC.ServerProc -- [h: Handle, c: Conversation, proc: CARD, clientData: REFANY
-- RETURNS [doReply: BOOLEAN, replyTimeToLive: CARDINAL] -- = {
o: fortytwo.TESTTYPESPROG3 ← NARROW[clientData];
doReply ← TRUE;
replyTimeToLive ← defaultReplyTTL;
SELECT proc FROM
13 => dotest3[h, c, o];
ENDCASE => ERROR SunRPC.Error[$wrongProc];
};
dotest3: PROC[h0: Handle, c0: Conversation, 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;
out: fortytwo.randomTypes;
a ← SunRPC.GetReal[h0];
b ← SunRPC.GetDReal[h0];
[] ← SunRPC.GetByte[h0];
[] ← SunRPC.GetByte[h0];
[] ← SunRPC.GetByte[h0];
c ← SunRPC.GetByte[h0];
d ← SunRPC.GetInt32[h0];
e ← SunRPC.GetInt32[h0];
f ← SunRPC.GetInt32[h0];
[] ← SunRPC.GetByte[h0];
[] ← SunRPC.GetByte[h0];
[] ← SunRPC.GetByte[h0];
g ← SunRPC.GetByte[h0];
h ← SunRPC.GetCard32[h0];
i ← SunRPC.GetCard32[h0];
j ← SunRPC.GetCard32[h0];
{
len: INT ← SunRPC.GetInt32[h0];
k ← NEW[fortytwo.SeqType2Object[len]];
FOR i: INT IN [0..len) DO
k[i] ← fortytwoGetPut.Gettuple[h0];
ENDLOOP;
};
FOR i: INT IN [0..3) DO
l[i] ← SunRPC.GetByte[h0];
ENDLOOP;
SunRPC.GetAlign[h0];
{
len: INT ← SunRPC.GetInt32[h0];
m ← NEW[fortytwo.SeqType3Object[len]];
FOR i: INT IN [0..len) DO
[] ← SunRPC.GetByte[h0];
[] ← SunRPC.GetByte[h0];
[] ← SunRPC.GetByte[h0];
m[i] ← SunRPC.GetByte[h0];
ENDLOOP;
};
out ← o.dotest[o,
a,
b,
c,
d,
e,
f,
g,
h,
i,
j,
k,
l,
m];
SunRPC.StartReply[h0];
fortytwoGetPut.PutrandomTypes[h0, out];
};
END.