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)); } } }
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(); } }