Ejemplo n.º 1
0
        public async Task <IActionResult> Patch([FromODataUri] int key, Delta <T> value)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var entity = await TableForT().FindAsync(key);

            if (entity == null)
            {
                return(NotFound());
            }
            if (CanUpdate(entity) == false)
            {
                return(Forbid());
            }
            value.Patch(entity);
            try
            {
                await context.SaveChangesAsync();

                await message.Send(TopicEnum.Patch, value.GetType().Name, value);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!EntityExists(key))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
            return(Updated(entity));
        }
Ejemplo n.º 2
0
    private IEnumerator AnimateDelta(Delta delta)
    {
        if (delta is AddToHandDelta)
        {
            yield return(uiManager.DrawCard((delta as AddToHandDelta).Card));
        }
        else if (delta is AddToDiscardDelta)
        {
            uiManager.UpdateDiscardDisplay(
                Array.FindIndex(gameManager.Players, player => player.Discard == (delta as AddToDiscardDelta).Target)
                );
        }
        else if (delta is AddToLaneDelta)
        {
            AddToLaneDelta addToLaneDelta = delta as AddToLaneDelta;
            yield return(uiManager.SpawnUnit(addToLaneDelta.SideIndex, Array.FindIndex(gameManager.Lanes, lane => lane.ID == addToLaneDelta.Target.ID), addToLaneDelta.Position));
        }
        else if (delta is UnitHealthDelta)
        {
            UnitHealthDelta damageDelta = delta as UnitHealthDelta;

            if (damageDelta.DmgType == Damage.Type.TOWER)
            {
                yield return(uiManager.TowerUnitDamage(damageDelta.Target, damageDelta.Amount));
            }
            else if (damageDelta.DmgType == Damage.Type.HEAL)
            {
                yield return(uiManager.UnitHeal(damageDelta.Source, damageDelta.Target));
            }
            else
            {
                yield return(uiManager.UnitDamage(
                                 damageDelta.Source,
                                 damageDelta.Target,
                                 damageDelta.Amount
                                 ));
            }
        }
        else if (delta is RemoveFromLaneDelta)
        {
            RemoveFromLaneDelta removeDelta = delta as RemoveFromLaneDelta;
            yield return(uiManager.RemoveUnit(
                             Array.FindIndex(gameManager.Lanes, lane => lane.ID == removeDelta.Target.ID),
                             removeDelta.SideIndex,
                             removeDelta.Position
                             ));
        }
        else if (delta is TowerDamageDelta)
        {
            TowerDamageDelta towerDamageDelta = delta as TowerDamageDelta;
            yield return(uiManager.UnitTowerDamage(towerDamageDelta.Target, towerDamageDelta.Amount));
        }
        else if (delta is TowerReviveDelta)
        {
            TowerReviveDelta towerReviveDelta = delta as TowerReviveDelta;
            yield return(uiManager.TowerRespawn(towerReviveDelta.Target));
        }
        else if (delta is RevealHandCardDelta)
        {
            RevealHandCardDelta revealDelta = delta as RevealHandCardDelta;
            yield return(uiManager.RevealOpponentCard(revealDelta.Card));
        }
        else if (delta is RemoveFromHandDelta)
        {
            RemoveFromHandDelta removeDelta = delta as RemoveFromHandDelta;
            yield return(uiManager.RemoveFromHand(
                             Array.FindIndex(gameManager.Players, player => player.Owns(removeDelta.Target)),
                             removeDelta.Card
                             ));
        }
        else if (delta is ResourcePoolDelta)
        {
            ResourcePoolDelta resourcePoolDelta = delta as ResourcePoolDelta;
            ResourcePool      target            = resourcePoolDelta.rp.Target;
            for (int i = 0; i < gameManager.Players.Length; i++)
            {
                if (target == gameManager.Players[i].ManaPool)
                {
                    yield return(uiManager.UpdateResourceDisplay(i));
                }
            }
        }
        else
        {
            // Some deltas simply can't be animated, while others could potentially indicate an error.
            if (!(delta is RemoveFromDeckDelta))
            {
                Debug.LogWarning($"Failed to animate delta of type {delta.GetType().Name}");
            }
        }

        uiManager.RenderUnits();
        uiManager.RenderTowers();
        uiManager.RenderIndicators();
    }
Ejemplo n.º 3
0
        public static void Main()
        {
            //find local IP
            IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress   ipAddr  = ipEntry.AddressList[0];
            //consts
            string    HostName = ipAddr.ToString(); //by default, is using same local IP addr as server; assuming above process is deterministic
            const int Port     = 4011;
            //objs
            TcpClient     client;
            NetworkStream stream;

            // used for testing delta code
            List <Deck> decks = new List <Deck>();

            Console.WriteLine("Connecting to server at {0}:{1}...", HostName, Port);

            try{
                //actual work
                client = new TcpClient(HostName, Port);

                Console.WriteLine("Connected!");

                CardLoader cl = new CardLoader();

                Console.WriteLine("Testing Unkown Card == Card: {0}",
                                  new UnknownCard() == cl.LoadCard("Exostellar Marine Squad")?
                                  "Success" : "Fail");

                Console.WriteLine("Testing Card == Unkown Card: {0}",
                                  cl.LoadCard("Exostellar Marine Squad") == new UnknownCard() ?
                                  "Success" : "Fail");


                stream = client.GetStream();

                byte[] data;

                /*
                 * //send a message
                 * Console.WriteLine("Press Enter to start a message...");
                 * Console.Read();
                 * data = System.Text.Encoding.UTF8.GetBytes("<file type='HI!!!'>");
                 * stream.Write(data, 0, data.Length);
                 *
                 * //test if will wait for EOF
                 * Console.WriteLine("Press Enter to finish the message...");
                 * Console.Read();
                 * data = System.Text.Encoding.UTF8.GetBytes("</file>GARBAGE");
                 * stream.Write(data, 0, data.Length);
                 *
                 * //recieve
                 * data = new byte[256];
                 * stream.Read(data, 0, data.Length);
                 * Console.WriteLine("Response from server: {0}",System.Text.Encoding.UTF8.GetString(data));
                 * // */

                //join a game
                Console.WriteLine("Press Enter to join a game...");
                Console.Read();
                data = System.Text.Encoding.UTF8.GetBytes("<file type='joinMatch'><deck id='testing'/></file>");
                stream.Write(data, 0, data.Length);

                //*
                //get matchstart message
                data = new byte[256];
                stream.Read(data, 0, data.Length);
                string startResp = System.Text.Encoding.UTF8.GetString(data);
                Console.WriteLine("Response from server: {0}", startResp);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(startResp);
                foreach (XmlElement e in doc.GetElementsByTagName("playerIds"))
                {
                    Deck     deck = new Deck(e.Attributes["deck"].Value);
                    DeckList list = new DeckList();
                    list.AddCard(new UnknownCard(), 20); // the dummy placeholder deck
                    deck.LoadCards(list);
                    decks.Add(deck);
                }
                // */

                //send a gameaction message
                Console.WriteLine("Press Enter to make a move...");
                Console.Read();
                data = System.Text.Encoding.UTF8.GetBytes("<file type='gameAction'><action></action></file>");
                stream.Write(data, 0, data.Length);

                // get and parse XML deltas
                data = new byte[256];
                stream.Read(data, 0, data.Length);
                string resp = System.Text.Encoding.UTF8.GetString(data);
                Console.WriteLine("Response from server: {0}", resp);
                doc = new XmlDocument();
                doc.LoadXml(resp);
                foreach (XmlElement e in doc.GetElementsByTagName("delta"))
                {
                    Delta d = Delta.FromXml(e, cl);
                    Console.WriteLine("Delta of type {0} parsed.", d.GetType());
                }

                //get and parse A LOT of Xml, for analysis purposes
                int       tests      = 1000;
                long      avMillis   = 0;
                Stopwatch watch      = new Stopwatch();
                Stopwatch totalWatch = new Stopwatch();
                totalWatch.Start();
                for (int i = 0; i < tests; i++)
                {
                    watch.Start();

                    // send request
                    data = System.Text.Encoding.UTF8.GetBytes("<file type='gameAction'><action></action></file>");
                    stream.Write(data, 0, data.Length);

                    // get and parse XML deltas
                    data = new byte[256];
                    stream.Read(data, 0, data.Length);
                    resp = System.Text.Encoding.UTF8.GetString(data);
                    doc  = new XmlDocument();
                    doc.LoadXml(resp);
                    foreach (XmlElement e in doc.GetElementsByTagName("delta"))
                    {
                        Delta d = Delta.FromXml(e, cl);
                    }
                    watch.Stop();
                    avMillis += watch.ElapsedMilliseconds / ((long)tests);
                    watch.Reset();
                }
                totalWatch.Stop();
                Console.WriteLine("{0} tests parsing Xml run; avergage time was {1} millis; total time was {2} millis.", tests, avMillis, totalWatch.ElapsedMilliseconds);

                //send a end turn message
                Console.WriteLine("Press Enter to end turn...");
                Console.Read();
                data = System.Text.Encoding.UTF8.GetBytes("<file type='lockInTurn'></file>");
                stream.Write(data, 0, data.Length);

                data = new byte[256];
                stream.Read(data, 0, data.Length);
                Console.WriteLine("Response from server: {0}", System.Text.Encoding.UTF8.GetString(data));

                //send a gameaction message
                Console.WriteLine("Press Enter to make a move...");
                Console.Read();
                data = System.Text.Encoding.UTF8.GetBytes("<file type='gameAction'><action></action></file>");
                stream.Write(data, 0, data.Length);

                data = new byte[256];
                stream.Read(data, 0, data.Length);
                Console.WriteLine("Response from server: {0}", System.Text.Encoding.UTF8.GetString(data));

                //send a gameaction message
                Console.WriteLine("Press Enter to make a move...");
                Console.Read();
                data = System.Text.Encoding.UTF8.GetBytes("<file type='gameAction'><action></action></file>");
                stream.Write(data, 0, data.Length);

                data = new byte[256];
                stream.Read(data, 0, data.Length);
                Console.WriteLine("Response from server: {0}", System.Text.Encoding.UTF8.GetString(data));

                //send a end turn message
                Console.WriteLine("Press Enter to end turn...");
                Console.Read();
                data = System.Text.Encoding.UTF8.GetBytes("<file type='lockInTurn'></file>");
                stream.Write(data, 0, data.Length);

                //wait for user then close
                Console.WriteLine("Presse Enter to disconnect...");
                Console.Read();
                stream.Close();
                client.Close();
            }catch (SocketException e) {
                Console.WriteLine("SocketEsception: {0}", e);
            }
        }