예제 #1
0
        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");
            }
        }
예제 #2
0
        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);
        }