<> <> <> <> <> <> <> DIRECTORY SRPCCalls USING [ ExportSunRPCInterface ], SunRPC, ThrushSunRPC, SynthesizerServerSunRPC, SynthesizerServerSunExport, SynthesizerServerSunRPCServer; SynthesizerServerSunRPCServerStub: CEDAR PROGRAM IMPORTS SRPCCalls, SunRPC, SynthesizerServerSunRPCServer EXPORTS SynthesizerServerSunExport ~ { OPEN SynthesizerServerSunRPC, SynthesizerServerSunRPCServer; Handle: TYPE = SunRPC.Handle; GetSynthesizerSpecificationsCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; serviceID: CARD32; nb: ROPE; synthesizerModel: ROPE; synthesizerVersion: ROPE; { shhh _ SunRPC.GetCard32[h]; }; { serviceID _ SunRPC.GetCard32[h]; }; [nb, synthesizerModel, synthesizerVersion] _ GetSynthesizerSpecifications[h, shhh, serviceID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutRope[h, synthesizerModel]; }; { SunRPC.PutRope[h, synthesizerVersion]; }; }; StopSpeechCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; serviceID: CARD32; reset: BOOLEAN; nb: ROPE; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { serviceID _ SunRPC.GetCard32[h]; }; { reset _ SunRPCGetBool[h]; }; [nb] _ StopSpeech[h, shhh, credentials, serviceID, reset]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; TextToSpeechCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; serviceID: CARD32; textToSpeak: ROPE; actionID: CARD32; filter: BOOLEAN; queueIt: BOOLEAN; nb: ROPE; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { serviceID _ SunRPC.GetCard32[h]; }; { textToSpeak _ SunRPC.GetRope[h]; }; { actionID _ SunRPC.GetCard32[h]; }; { filter _ SunRPCGetBool[h]; }; { queueIt _ SunRPCGetBool[h]; }; [nb] _ TextToSpeech[h, shhh, credentials, serviceID, textToSpeak, actionID, filter, queueIt]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; SunRPCBeginReturnProc: TYPE ~ PROC [h: Handle]; Server: SunRPC.ServerProc ~ { ENABLE { }; beginReturn: SunRPCBeginReturnProc ~ { SunRPC.StartReply[h]; }; doReply _ TRUE; replyTimeToLive _ 2; SELECT proc FROM 3 => GetSynthesizerSpecificationsCaller[h, beginReturn]; 2 => StopSpeechCaller[h, beginReturn]; 1 => TextToSpeechCaller[h, beginReturn]; ENDCASE => { ERROR SunRPC.Error[$wrongProc]; }; }; SunRPCGetBool: PROC [h: Handle] RETURNS [BOOL] ~ INLINE { RETURN [SunRPC.GetCard32[h] # 0] }; SunRPCPutBool: PROC [h: Handle, bool: BOOL] ~ INLINE { SunRPC.PutCard32[h, IF bool THEN 1 ELSE 0] }; <> sunPgm: CARD _ 390911; -- decimal program number sunPgmVersion: CARD _ 1; ExportInterface: PUBLIC PROC [port: CARD_0] RETURNS [uniquePort: CARD] ~ { uniquePort _ SRPCCalls.ExportSunRPCInterface[port, Server, sunPgm, sunPgmVersion]; }; }... <> <>