-
Notifications
You must be signed in to change notification settings - Fork 0
/
RpcClient.go
107 lines (87 loc) · 2.54 KB
/
RpcClient.go
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"ethos/altEthos"
"ethos/syscall"
"log"
)
/**
* RPC Client for Users.
*
* @author Sushen Kumar <skumar88@uic.edu>
*/
var usersList []User
func init() {
SetupMyRpcmakeAccountsReply(makeAccountsReply)
SetupMyRpcgetBalanceReply(getBalanceReply)
SetupMyRpctransferReply(transferReply)
SetupMyRpcwriteUserReply(writeUserReply)
}
// Reply for making accounts
func makeAccountsReply(users []User) MyRpcProcedure {
log.Printf("Created %v accounts!\n ", len(users))
usersList = users
return nil
}
// Reply for getting balance
func getBalanceReply(userID int64, userBalance int64) MyRpcProcedure {
log.Printf("Client_Received_Balance_Reply --- ID:_%v---Balance:_%v\n", userID, userBalance)
return nil
}
// Reply for transferring balance
func transferReply(user1 User, user2 User) MyRpcProcedure {
log.Printf("User %v has balance : %v and User %v has balance: %v\n", user1.UserID, user1.UserBalance, user2.UserID, user2.UserBalance)
return nil
}
// Reply for writing users to FS
func writeUserReply(userID int64) MyRpcProcedure {
log.Printf("User written to fileSystem: %v\n", userID)
return nil
}
// Main function
func main() {
altEthos.LogToDirectory("test/rpcClient")
log.Printf("rpcClient:_before_call\n")
fd, status := altEthos.IpcRepeat("MyRpc", "", nil)
if status != syscall.StatusOk {
log.Printf("Ipc_failed:_%v\n", status)
altEthos.Exit(status)
}
// An initial call to make 3 users
initialCall := MyRpcmakeAccounts{int64(3)}
status = altEthos.ClientCall(fd, &initialCall)
// Calls
if len(usersList) > 0 {
// Get balance for all users
for _, user := range usersList {
fd, status = altEthos.IpcRepeat("MyRpc", "", nil)
if status != syscall.StatusOk {
log.Printf("Ipc_failed:_%v\n", status)
altEthos.Exit(status)
}
call := MyRpcgetBalance{user}
status = altEthos.ClientCall(fd, &call)
}
// Transferring balance of one user to another
for i := 0; i < len(usersList)-1; i++ {
fd, status = altEthos.IpcRepeat("MyRpc", "", nil)
if status != syscall.StatusOk {
log.Printf("Ipc_failed:_%v\n", status)
altEthos.Exit(status)
}
call := MyRpctransfer{usersList[i], usersList[i+1], int64(100)}
status = altEthos.ClientCall(fd, &call)
}
// Write users to FS
for _, user := range usersList {
fd, status = altEthos.IpcRepeat("MyRpc", "", nil)
if status != syscall.StatusOk {
log.Printf("Ipc_failed:_%v\n", status)
altEthos.Exit(status)
}
call := MyRpcwriteUser{user}
status = altEthos.ClientCall(fd, &call)
}
}
// end
log.Printf("RpcClient:done\n")
}