示例#1
0
 public ClientInfo(ClientData data)
 {
     timer     = new Timer();
     this.Data = data;
     status    = CLIENT_STATUS.NONE;
 }
示例#2
0
文件: Duplex.cs 项目: alekscc/PSR
        public void SendResult(ClientData clientData)
        {
            for (int i = 0; i < listOfClients.Count; i++)
            {
                if (listOfClients[i].Data.Identifier == clientData.id)
                {
                    if (clientData.recordDist == 0)
                    {
                        continue;
                    }
                    TimeSpan inter = DateTime.Now - clientData.date;
                    listOfClients[i].Data.commTime += inter.Ticks * 100 + clientData.commTime;
                    listOfClients[i].UnPauseTimeCounting();
                    verticesMgmt.SubmitVertices(listOfClients[i].Data.listOfVertices);

                    listOfClients[i].AddTotalTime(clientData.time);
                    listOfClients[i].SetRecord(clientData.recordVert, clientData.recordDist);

                    if (recordVert == -1)
                    {
                        recordVert = clientData.recordVert;
                        recordDist = clientData.recordDist;
                        Printer.PrintRecord(recordVert, recordDist);
                    }
                    else if (recordDist > clientData.recordDist)
                    {
                        recordVert = clientData.recordVert;
                        recordDist = clientData.recordDist;
                        Printer.PrintRecord(recordVert, recordDist);
                    }


                    if (!verticesMgmt.IsListEmpty())
                    {
                        listOfClients[i].SetTimer(OnTimeEvent, timeoutInterval);
                        listOfClients[i].Data.listOfVertices = verticesMgmt.GetVertices(numberOfVertsPerClient);
                        listOfClients[i].Data.date           = DateTime.Now;
                        listOfClients[i].Data.Callback.SendData(listOfClients[i].Data);

                        listOfClients[i].IsFree = false;
                        //Console.WriteLine("Wysłałem wierzcholek do klienta {0}", listOfClients[i].Data.Identifier);
                        listOfClients[i].PauseTimeCounting();
                    }
                    else
                    {
                        listOfClients[i].StopTimer();
                        listOfClients[i].IsFree = true;
                        listOfClients[i].StopTimeCounting();
                        //listOfClients[i].Data.Callback.JoinAccept();

                        Console.WriteLine("Brak wolnych wierzchołków dla klienta:{0}", listOfClients[i].Data.Identifier);
                        //Console.WriteLine("Liczba skonczonych klientow:{0}, wszyscy klienci:{1}", clientsDone, listOfClients.Count);
                        bool isAllDone = true;
                        if (!listOfClients[i].IsDone)
                        {
                            listOfClients[i].IsDone = true;
                            listOfClients[i].LifeTime.Pause();

                            foreach (Client cli in listOfClients)
                            {
                                if (!cli.IsDone)
                                {
                                    isAllDone = false;
                                    Console.WriteLine("Liczba klientow zakonczonych:{0}", ++clientsDone);
                                    break;
                                }
                            }
                        }



                        if (isAllDone)
                        {
                            long clientsTotalTime    = 0;
                            long clientsMaintainTime = 0;
                            long clientsCommTime     = 0;
                            foreach (Client c in listOfClients)
                            {
                                c.LifeTime.Stop();
                                clientsMaintainTime += c.MaintainTime;
                                clientsTotalTime    += c.TotalTime;
                                clientsCommTime     += c.Data.commTime;
                            }
                            Console.WriteLine("Progam zakonczony");
                            stopTotalTime     = DateTime.Now;
                            intervalTotalTime = stopTotalTime - startTotalTime;
                            totalTime         = intervalTotalTime.Ticks * 100;

                            int numberOfClients = clientsDone + 1;
                            clientsTotalTime /= numberOfClients;
                            clientsCommTime  /= numberOfClients;
                            //clientsTotalTime = totalTime - clientsComTime;
                            Console.WriteLine("Średni czas algorytmu:" + clientsTotalTime);
                            // long commTotalTime = clientsMaintainTime;
                            clientsMaintainTime /= numberOfClients;
                            Console.WriteLine("Średni czas obsługi:" + clientsMaintainTime);
                            Console.WriteLine("Średni czas kom:" + clientsCommTime);
                            //totalTime = commTotalTime + clientsTotalTime;
                            Console.WriteLine("Czas całkowity:" + totalTime);
                            FileStream   fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
                            StreamWriter w          = new StreamWriter(fileStream, Encoding.UTF8);

                            w.WriteLine("Ilosc wierzchołków;ilość watkow;ilosc klientow;wielkosc pakietu;czas calk.;czas kom.;śr. czas alg.; śr. czas obsługi;rekord nr.;rekord dystans");
                            w.WriteLine(matrix.Length + ";" + numberOfThreads + ";" + numberOfClients + ";" + numberOfVertsPerClient + ";" + totalTime + ";" + clientsCommTime + ";" + clientsTotalTime + ";" + clientsMaintainTime + ";" + recordVert + ";" + recordDist);

                            w.Close();
                            fileStream.Close();

                            fileStream = new FileStream("workers_" + fileName, FileMode.Create, FileAccess.ReadWrite);
                            w          = new StreamWriter(fileStream, Encoding.UTF8);
                            w.WriteLine("klient id.;klient nazwa;czas zycia;czas synch. danych;czas całk.;czas obsl.;czas kom.;czas alg.;wierzcholek nr.;wierzcholek dystans");
                            foreach (Client c in listOfClients)
                            {
                                long time = c.TotalTime + c.MaintainTime + c.Data.commTime;
                                Console.WriteLine("Czas całk. dla {0} to {1}", c.Data.Identifier, time);
                                w.WriteLine(c.Data.Identifier + ";" + c.Data.Name + ";" + c.LifeTime.GetTime() + ";" + c.DataSyncTime + ";" + time + ";" + c.MaintainTime + ";" + c.Data.commTime + ";" + c.TotalTime + ";" + c.RecordVertice + ";" + c.RecordDistance);
                            }

                            w.Close();
                            fileStream.Close();
                            Console.WriteLine("Dane zapisane do {0} i {1}", fileName, "workers_" + fileName);
                        }
                        else
                        {
                            Console.WriteLine("nie wszyscy klienci gotowi");
                        }
                    }
                }
            }
        }