public Models.Messages.JoinTableResponse Post(Models.Messages.JoinTableRequest request) { if (base.Verify(request.BitcoinAddress, request.ToString(), request.Signature) == true) { Models.Messages.JoinTableResponse response = new Models.Messages.JoinTableResponse(); Models.Contracts.Table table = this.TableRepo.Find(request.TableId); if (table != null) { for (Int32 i = 0; i < table.MaxPlayers; i++) { if (table.Peers[i] == null) { response.Seat = i; table.Peers[i] = new Models.Peer() { BitcoinAddress = request.BitcoinAddress, NetworkAddress = request.NetworkAddress, UserAgent = request.UserAgent }; TableRepo.Update(table); break; } } response.Seat = request.Seat; return(response); } else { throw new ArgumentException("Table id not found"); } } else { throw new ArgumentException("Invalid signature"); } }
public void Should_Join_Table_In_Seat_2() { Guid tableId = new Guid(TABLE_ID); _controller.TableRepo = new Repository.Mocks.TableRepository(); Models.Messages.JoinTableRequest request = new Models.Messages.JoinTableRequest() { Id = new Guid(REQUEST_ID), BitcoinAddress = BITCOIN_ADDRESS_1, TableId = tableId, TimeStamp = new DateTime(2016, 12, 12), Seat = 2, Version = 1 }; NBitcoin.BitcoinSecret secret = new NBitcoin.BitcoinSecret(PRIVATE_KEY, NBitcoin.Network.TestNet); request.Signature = secret.PrivateKey.SignMessage(request.ToString()); Models.Messages.JoinTableResponse response = null; //_controller.Post(request); Assert.IsNotNull(response); Assert.AreEqual(2, response.Seat); }