forked from stimms/JavaScriptPatterns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRequestResponse.ts
57 lines (50 loc) · 1.52 KB
/
RequestResponse.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
module Westeros.Communication{
export class Message{
__messageDate: Date;
__from: string;
__corrolationId: number;
body: string;
}
export class CrowMailRequestor{
public Request(){
var message = { __messageDate : new Date(),
__from : "requestor",
__corrolationId : Math.random(),
body: "Hello there. What is the square root of 9?"};
var bus = new CrowMailBus(this);
bus.Send(message);
console.log("message sent!");
}
public processMessage(message: Message){
console.dir(message);
}
}
export class CrowMailResponder{
constructor(public bus: CrowMailBus){}
processMessage(message:Message){
var response = { __messageDate : new Date(),
__from : "responder",
__corrolationId : message.__corrolationId,
body: "Pretty sure it is 3."};
this.bus.Send(response);
console.log("Reply sent");
}
}
export class CrowMailBus{
responder: CrowMailResponder;
constructor(public requestor: CrowMailRequestor){
this.responder = new CrowMailResponder(this);
}
public Send(message:Message){
if(message.__from == "requestor")
{
process.nextTick(() => this.responder.processMessage(message));
}
else{
process.nextTick(() => this.requestor.processMessage(message));
}
}
}
}
var requestor = new Westeros.Communication.CrowMailRequestor();
requestor.Request();