Skip to content

Commit

Permalink
Whitespace InstantMessengerApplication.ns
Browse files Browse the repository at this point in the history
Signed-off-by: Stefan Marr <[email protected]>
  • Loading branch information
smarr committed Dec 10, 2019
1 parent f99a6c5 commit f54541b
Showing 1 changed file with 75 additions and 96 deletions.
171 changes: 75 additions & 96 deletions core-lib/demos/applications/InstantMessengerApplication.ns
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,39 @@ class InstantMessengerApplication usingPlatform: platform = Value (
private TransferArray = platform kernel TransferArray.
private Dictionary = platform collections Dictionary.
private TransferObject = platform kernel TransferObject.
|
)(
|)(

public class InstantMessenger new: name total: size = (
| private buddyMap ::= Dictionary new: size.
public class InstantMessenger new: name total: size = (
| private buddyMap = Dictionary new: size.
private name = name.
private textMessage ::= nil.
|
)(
|)(

public startChat: remoteMessenger = (
| pDiscover pName pSend msg pp array |

pp:: actors createPromisePair.
pp:: actors createPromisePair.

pDiscover:: self addMessenger: remoteMessenger. (* returns a far reference of the remote messenger *)
(* returns a far reference of the remote messenger *)
pDiscover:: self addMessenger: remoteMessenger.

pName:: pDiscover <-: getName.
pName whenResolved: [:remoteName |
msg:: ('Hello ' + remoteName).
pSend:: sendMessage: remoteName contentMsg: msg.
pName:: pDiscover <-: getName.
pName whenResolved: [:remoteName |
msg:: 'Hello ' + remoteName.
pSend:: sendMessage: remoteName contentMsg: msg.

pSend whenResolved:[:result |
(result = 'ok')
ifTrue:[
array:: TransferArray new: 2. (* array with the msg to display in the sender actor screen *)
array at: 1 put: name.
array at: 2 put: msg.
pp resolver resolve: array.
]
ifFalse:[
pp resolver resolve: nil.
]
].
].
pSend whenResolved: [:result |
result = 'ok'
ifTrue: [
(* array with the msg to display in the sender actor screen *)
array:: TransferArray new: 2.
array at: 1 put: name.
array at: 2 put: msg.
pp resolver resolve: array ]
ifFalse:[
pp resolver resolve: nil ] ] ].


^ pp promise
^ pp promise
)

public getName = (
Expand All @@ -65,26 +60,23 @@ public class InstantMessenger new: name total: size = (

public addMessenger: messenger = (
| p name pName buddy |

p:: actors createPromisePair.

pName:: messenger <-: getName.
pName whenResolved:[:n |
(buddyMap containsKey: n)
ifTrue:[
buddyMap at: n put: messenger. (* update el far reference *)
(getName + ' updated the far reference to buddy: '+ n) println.
]
ifFalse:[
buddyMap at: n put: messenger.
(getName + ' discovered a new messenger buddy: '+ n) println.
].
p resolver resolve: (buddyMap at: n).

] onError:[:e|
('-Error adding the messenger: ' + e) println.
p resolver resolve: nil.
].
p:: actors createPromisePair.

pName:: messenger <-: getName.
pName whenResolved: [:n |
(buddyMap containsKey: n)
ifTrue: [
buddyMap at: n put: messenger. (* update el far reference *)
(getName + ' updated the far reference to buddy: '+ n) println. ]
ifFalse: [
buddyMap at: n put: messenger.
(getName + ' discovered a new messenger buddy: '+ n) println ].

p resolver resolve: (buddyMap at: n).
] onError: [:e |
('-Error adding the messenger: ' + e) println.
p resolver resolve: nil.
].

^ p promise
)
Expand All @@ -96,70 +88,57 @@ public class InstantMessenger new: name total: size = (
sender:: textMessage getSender.

(* print message to the screen *)
self displayMessage: sender +': '+ content.
self displayMessage: sender + ': ' + content.

(* acknowledgement notification of message received *)
^ 'ok'.
)
)
)

class TextMessage new: content sender: senderName = TransferObject (
class TextMessage new: content sender: senderName = TransferObject (
| private msg = content.
private sender = senderName.
|
)(

public getContent = (
^ msg.
)
|)(
public getContent = (
^ msg.
)

public getSender = (
^ sender
public getSender = (
^ sender
)
)

)

public main: args = (
| completionPP1 completionPP2 users messenger1 messenger2 pResult1 pResult2 |

completionPP1:: actors createPromisePair.

completionPP2:: actors createPromisePair.

'[INSTANT MESSENGER APPLICATION] Starting' println.
| completionPP1 completionPP2 users messenger1 messenger2 pResult1 pResult2 |

users:: Array new: 2.
users at: 1 put: 'Joe'.
users at: 2 put: 'Marie'.
completionPP1:: actors createPromisePair.
completionPP2:: actors createPromisePair.

messenger1:: (actors createActorFromValue: InstantMessenger) <-: new: (users at: 1) total: users size.
messenger2:: (actors createActorFromValue: InstantMessenger) <-: new: (users at: 2) total: users size.
'[INSTANT MESSENGER APPLICATION] Starting' println.

pResult1:: messenger1 <-: startChat: messenger2.
pResult1 whenResolved:[:result |
result
ifNotNil:[
messenger1 <-: displayMessage: (result at: 1) +': '+ (result at: 2).
completionPP1 resolver resolve: 0. (* end application *)
]
].
users:: Array new: 2.
users at: 1 put: 'Joe'.
users at: 2 put: 'Marie'.

pResult2:: messenger2 <-: startChat: messenger1.
pResult2 whenResolved:[: result|
result
ifNotNil:[
messenger2 <-: displayMessage: (result at: 1) +': '+ (result at: 2).
completionPP2 resolver resolve: 0. (* end application *)
]
].
messenger1:: (actors createActorFromValue: InstantMessenger) <-: new: (users at: 1) total: users size.
messenger2:: (actors createActorFromValue: InstantMessenger) <-: new: (users at: 2) total: users size.

^ completionPP1 promise whenResolved: [:result1 |
pResult1:: messenger1 <-: startChat: messenger2.
pResult1 whenResolved: [:result |
result ifNotNil: [
messenger1 <-: displayMessage: (result at: 1) + ': ' + (result at: 2).
completionPP1 resolver resolve: 0. (* end application *)
] ].

completionPP2 promise whenResolved: [:result2 |
pResult2:: messenger2 <-: startChat: messenger1.
pResult2 whenResolved: [:result |
result ifNotNil:[
messenger2 <-: displayMessage: (result at: 1) + ': ' + (result at: 2).
completionPP2 resolver resolve: 0. (* end application *)
] ].

'\n\n''[INSTANT MESSENGER APPLICATION] Ending' println.
].
].
)

)
^ completionPP1 promise whenResolved: [:result1 |
completionPP2 promise whenResolved: [:result2 |
'\n\n[INSTANT MESSENGER APPLICATION] Ending' println ] ].
)
)

0 comments on commit f54541b

Please sign in to comment.