diff --git a/mp3/Readme.md b/mp3/Readme.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/mp3/Server/server.go b/mp3/Server/server.go index 5a78a00a7cbfb42f7652d242d907aa58a4d853f0..d3fdd3a55cce3f69924e68de26cfe21e410c70d3 100644 --- a/mp3/Server/server.go +++ b/mp3/Server/server.go @@ -57,6 +57,7 @@ type Request struct { Branch string Account string Amount int + Message string } type Response struct { @@ -64,7 +65,7 @@ type Response struct { Message string } -var NUM_SERVERS int = 2 // number of servers +var NUM_SERVERS int = 1 // number of servers ////////////////////////////// // CLIENT FUNCTIONS @@ -272,7 +273,6 @@ func (server *Server) run_commit(clientName string) { fmt.Println("Updated Accounts", server.ClientsAffected[clientName]) for { - fmt.Println("WAITING FOR VOTE ON", clientName) vote := <-server.VoteClientChans[clientName] // get vote fmt.Println("Received vote", vote) @@ -327,6 +327,8 @@ func (server *Server) run_commit(clientName string) { server.handle_transaction(prepareRequest) } } + server.send_response_to_client(clientName, true, "COMMIT") + server.print_all_balances() } } } @@ -757,7 +759,13 @@ func (server *Server) handle_prepare(request Request) { server.Lock.Unlock() if !exists { - server.VoteClientChans[request.ClientName] <- "ABORT" + request.Transaction = "PLACEMESSAGE" + request.Message = "ABORT" + if request.PeerName == server.BranchName { + server.handle_transaction(request) + } else { + server.PeerEncs[server.BranchNameToAddress[request.PeerName]].Encode(&request) + } return } @@ -765,7 +773,25 @@ func (server *Server) handle_prepare(request Request) { entry, ok := account.TW[request.ClientName] if !ok { - server.VoteClientChans[request.ClientName] <- "ABORT" + request.Transaction = "PLACEMESSAGE" + request.Message = "ABORT" + if request.PeerName == server.BranchName { + server.handle_transaction(request) + } else { + server.PeerEncs[server.BranchNameToAddress[request.PeerName]].Encode(&request) + } + account.AccountLock.Unlock() + return + } + + if account.Balance < 0 { + request.Transaction = "PLACEMESSAGE" + request.Message = "ABORT" + if request.PeerName == server.BranchName { + server.handle_transaction(request) + } else { + server.PeerEncs[server.BranchNameToAddress[request.PeerName]].Encode(&request) + } account.AccountLock.Unlock() return } @@ -782,7 +808,13 @@ func (server *Server) handle_prepare(request Request) { if prevAllCommitted { fmt.Println("PLACED COMMIT INTO CHANNEL", request.ClientName) - server.VoteClientChans[request.ClientName] <- "COMMIT" + request.Transaction = "PLACEMESSAGE" + request.Message = "COMMIT" + if request.PeerName == server.BranchName { + server.handle_transaction(request) + } else { + server.PeerEncs[server.BranchNameToAddress[request.PeerName]].Encode(&request) + } break } else { account.AccountLock.Unlock() @@ -814,6 +846,11 @@ func (server *Server) handle_transaction(request Request) { case "SEND": fmt.Println("PEER", request.PeerName) go server.send_response_to_client(request.ClientName, request.Amount == 1, request.Account) + case "PLACEMESSAGE": + server.Lock.Lock() + fmt.Println("PUTTING IN", request.Message, "INTO", request.ClientName) + server.VoteClientChans[request.ClientName] <- request.Message + server.Lock.Unlock() } }