From 852edd4bdccc22454adb0e145245cad8661ee77e Mon Sep 17 00:00:00 2001 From: owenw2 <owenw2@sp25-cs425-0601.cs.illinois.edu> Date: Fri, 9 May 2025 19:54:46 -0500 Subject: [PATCH] completed server code --- mp3/Readme.md | 0 mp3/Server/server.go | 47 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 mp3/Readme.md diff --git a/mp3/Readme.md b/mp3/Readme.md new file mode 100644 index 0000000..e69de29 diff --git a/mp3/Server/server.go b/mp3/Server/server.go index 5a78a00..d3fdd3a 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() } } -- GitLab