Beispiel #1
0
        public async Task ObradiIme(Socket klijentskiSoket)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            NetworkStream   tok       = new NetworkStream(klijentskiSoket);
            bool            kraj      = false;
            string          ime       = "";

            while (!kraj)
            {
                try
                {
                    ime = (string)formatter.Deserialize(tok);
                    if (ime is null || ime.Length <= 4)
                    {
                        continue;
                    }

                    kraj = true;
                }
                catch (Exception)
                {
                    throw;
                }
            }

            IgracSkocko igrac = (IgracSkocko)KreirajIgraca(ime, klijentskiSoket);

            listaIgraca.Add(igrac);
            Odgovor o = (Odgovor)KreirajOdgovor("Trazimo protivnika", 1, Igrac.Trazenje);

            formatter.Serialize(tok, o);

            if (listaIgraca.Count % 2 == 0)
            {
                IgracSkocko prviIgrac  = listaIgraca[0];
                IgracSkocko drugiIgrac = listaIgraca[1];
                Obrada      obrada     = new Obrada(listaIgraca[0], listaIgraca[1], listaIgraca);
                var         rezultat   = Task.Run(() => obrada.ObradiZahtev());
                listaIgraca.Clear();
                //Thread klijentNit = new Thread(obrada.ObradiZahtev);
                var vreme = Task.Run(async() =>
                {
                    for (int i = 10; i >= 0; i--)
                    {
                        await Task.Delay(1000);
                    }
                });

                var rez = await Task.WhenAny(rezultat, vreme);

                if (rez == vreme)
                {
                    formatter.Serialize(tok, KreirajOdgovor("Isteklo vreme", 1, Igrac.Ja));
                }
            }
        }
Beispiel #2
0
        private void ObradiReset(IgracSkocko igrac, NetworkStream tokIgrac, BinaryFormatter formaterIgrac)
        {
            Zahtev z = (Zahtev)formaterIgrac.Deserialize(tokIgrac);

            if (z.rec == "RESETUJ")
            {
                listaIgraca.Add(igrac);
            }
            if (listaIgraca.Count % 2 == 0)
            {
                //ovde ne radi zato sto on svakako posalje ISTEKLO kada istekne vreme.
                //moram cancel taskova da naucim
                Obrada obrada   = new Obrada(listaIgraca[0], listaIgraca[1], listaIgraca);
                var    rezultat = Task.Run(() => obrada.ObradiZahtev());
                listaIgraca.Clear();
            }
        }