/// <summary> /// Funkcja słuząca do zamiany nagłówka, uwzgledniajaca "-1" w czestotliwosci /// </summary> /// <param name="message">Wiadomość odebrana w postaci tablicy bajtów</param> /// <returns></returns> public byte[] changePackageHeader2(byte[] message, ref CommutationField commutationField) { byte[] msg = new byte[64]; msg = message; Package p = new Package(msg); //Jak czestotliwosc jest rowna -1 if (p.frequency == -1) { BorderNodeCommutationTableRow row = new BorderNodeCommutationTableRow(); row = this.FindRow(p.IP_Source.ToString(), p.portNumber, p.IP_Destination.ToString()); p.changeBand(row.band); p.changeFrequency(row.frequency); p.changeModulationPerformance(row.modulationPerformance); p.changeBitRate(row.bitRate); p.changePort(row.Port); msg = p.toBytes(); } //Jak nie bylo -1, to odwolujemy sie do tabeli komutacji, ale nie brzegowej else { msg = commutationField.commutationTable.changePackageHeader(msg); } return(msg); }
public void testAddBorderNodeCommutationTableRow() { IPAddress IP_IN = IPAddress.Parse("123.123.123.123"); short port_in = 1; short band = 2; short frequency = 3; short modulationPerformance = 4; short bitRate = 5; IPAddress IPSocketOut = IPAddress.Parse("234.234.234.234"); short socketPort = 6; short hopsNumber = 7; //stworzenie nowego rzedu tablicy komutacji routera brzegowego BorderNodeCommutationTableRow row = new BorderNodeCommutationTableRow(IP_IN.ToString(), port_in, band, frequency, modulationPerformance, bitRate, IPSocketOut.ToString(), socketPort, hopsNumber); //nowa tabela komutacji wezla brzegowego BorderNodeCommutationTable table = new BorderNodeCommutationTable(); //Dodanie wiersza do tabeli komutacji wezla brzegowego table.Table.Add(row); //Powinny byc takie same Assert.AreEqual(row, table.Table[0]); }
public void testFindRow1() { string IP = "127.0.0.1"; short port = 2; //Nowa tabela BorderNodeCommutationTable table = new BorderNodeCommutationTable(); //Nowy rząd BorderNodeCommutationTableRow row = new BorderNodeCommutationTableRow(IP, port, 0, 0, 0, 0, "0.0.0.0", 0, 0); //Dodanie rzedu do tabeli table.Table.Add(row); // Assert.AreEqual(row, table.FindRow(IP, port)); // Assert.AreEqual(0, table.FindIndex(IP, port)); }
/// <summary> /// Funkcja odnajdujaca rzad, w ktorym jest okreslone IP i nr portu /// </summary> /// <param name="IP_IN"></param> /// <param name="port_in"></param> /// <returns></returns> public BorderNodeCommutationTableRow FindRow(string IP_IN, short port_in, string IP_Destination) { //Jeden rzad tablicy komutacji BorderNodeCommutationTableRow borderRow = null; try { IPAddress IP = IPAddress.Parse(IP_IN); //Wyszukiwanie takiego rzedu, ktory ma podane IP_IN i port_in borderRow = this.Table.Find(row => (row.IP_IN.ToString() == IP_IN) && (row.port_in == port_in) && (row.IP_Destination.ToString() == IP_Destination)); return(borderRow); } catch (Exception E) { return(borderRow); } }
/// <summary> /// Funkcja słuząca do zamiany nagłówka /// </summary> /// <param name="message">Wiadomość odebrana w postaci tablicy bajtów</param> /// <returns></returns> public byte[] changePackageHeader(byte[] message) { byte[] msg = new byte[64]; msg = message; Package p = new Package(msg); BorderNodeCommutationTableRow row = new BorderNodeCommutationTableRow(); row = this.FindRow(p.IP_Source.ToString(), p.portNumber, p.IP_Destination.ToString()); p.changeBand(row.band); p.changeFrequency(row.frequency); p.changeModulationPerformance(row.modulationPerformance); p.changeBitRate(row.bitRate); p.changePort(row.Port); msg = p.toBytes(); return(msg); }
public void testGenerateCharacteristicInfo() { IPAddress IP_IN = IPAddress.Parse("123.123.123.123"); short port_in = 1; short band = 2; short frequency = 3; short modulationPerformance = 4; short bitRate = 5; IPAddress IPSocketOut = IPAddress.Parse("234.234.234.234"); short socketPort = 6; short hopsNumber = 7; //stworzenie nowego rzedu tablicy komutacji routera brzegowego BorderNodeCommutationTableRow row = new BorderNodeCommutationTableRow(IP_IN.ToString(), port_in, band, frequency, modulationPerformance, bitRate, IPSocketOut.ToString(), socketPort, hopsNumber); //pozostale dane do pakietu, korzysta tez z danych od pakietu string inscription = "Mam malo wody"; short portNumber = port_in; IPAddress IP_Source = IP_IN; IPAddress IP_Destination = IPSocketOut; short packageNumber = 5; short usableInfoLength = (short)inscription.Length; short ID = 17; short howManyPackages = 1; //Stworzenie pakietu Package P = new Package(inscription, portNumber, IP_Destination.ToString(), IP_Source.ToString(), usableInfoLength, packageNumber, 0, 0, 0, 0, ID, howManyPackages); BorderNodeCommutationTable table = new BorderNodeCommutationTable(); table.Table.Add(row); Package P2 = new Package(RouterClientPortIn.GenerateCharacteristicInfo(P.toBytes(), ref table)); Assert.AreEqual(row.frequency, P2.frequency); Assert.AreEqual(row.band, P2.band); Assert.AreEqual(row.bitRate, P2.bitRate); Assert.AreEqual(row.modulationPerformance, P2.modulationPerformance); }
/// <summary> /// Funkcja słuząca do zamiany nagłówka, uwzgledniajaca "-1" w czestotliwosci /// </summary> /// <param name="message">Wiadomość odebrana w postaci tablicy bajtów</param> /// <returns></returns> public byte[] changePackageHeader2(byte[] message, ref CommutationField commutationField) { byte[] msg = new byte[64]; msg = message; Package p = new Package(msg); //Jak czestotliwosc jest rowna -1 if (p.frequency == -1) { BorderNodeCommutationTableRow row = new BorderNodeCommutationTableRow(); row = this.FindRow(p.IP_Source.ToString(), p.portNumber, p.IP_Destination.ToString()); //Gdy udalo sie znalezc wpis w tabeli, podmien pola naglowka if (row != null) { p.changeBand(row.band); p.changeFrequency(row.frequency); p.changeModulationPerformance(row.modulationPerformance); p.changeBitRate(row.bitRate); // p.changePort(row.Port); } //Jak sie nie udalo, to wpisz -2 do czestotliwosci else { //-2 oznacza "upusc pakiet" p.changeFrequency(-2); } msg = p.toBytes(); } //Jak nie bylo -1, to odwolujemy sie do tabeli komutacji, ale nie brzegowej msg = commutationField.commutationTable.changePackageHeader(msg); return(msg); }
private void setRouting(string [] message) { string address = message[0]; if (message[1] == MessageNames.CONNECTION_TEARDOWN) { if (message[3] == "CC") { short frequency = Int16.Parse(message[10]); short port_In = Int16.Parse(message[5]); short port_Out = Int16.Parse(message[7]); CommutationTableRow rowToDelete = new CommutationTableRow(); rowToDelete = commutationTable.FindRow(Convert.ToInt16(message[10]), Convert.ToInt16(message[5])); commutationTable.Table.Remove(rowToDelete); string responseMessage = System.Configuration.ConfigurationManager.AppSettings["UDP" + numberOfRouter] + "#" + MessageNames.CONNECTION_TEARDOWN + "#OK" + "#" + "CC#"; SendingMessageCC(address, responseMessage); Console.WriteLine("[" + Timestamp.generateTimestampRCC() + "] Message delete from table {0} frequency {1} port_in {2} port_out {3}", "COMUTATION", frequency, port_In, port_Out); } else if (message[3] == "BORDERTABLE") { string responseMessage = System.Configuration.ConfigurationManager.AppSettings["UDP" + numberOfRouter] + "#" + MessageNames.CONNECTION_TEARDOWN + "#OK" + "#" + "CC#"; BorderNodeCommutationTableRow newRow = new BorderNodeCommutationTableRow(); //IP source--IP destination--czestotliwosc newRow = borderNodeCommutationTable.FindRow(message[4], message[6], Int16.Parse(message[7])); borderNodeCommutationTable.Table.Remove(newRow); // SendingMessageCC(address, responseMessage); Console.WriteLine("[" + Timestamp.generateTimestampRCC() + "] Message delete from table {0} frequency {1} address source: {2} address destination {3}", "BORDER_NODE_COMUTATION", message[7], message[4], message[6]); } } else if (message[1] == MessageNames.CONNECTION_REQUEST) { if (message[3] == "CC") { Console.WriteLine("[" + Timestamp.generateTimestampRCC() + "] Received message filling Commutation Table from CC " + message[0]); short frequency = Int16.Parse(message[10]); short port_In = Int16.Parse(message[5]); short port_Out = Int16.Parse(message[7]); CommutationTableRow commuteRow = new CommutationTableRow(frequency, port_In, frequency, port_Out); commutationTable.Table.Add(commuteRow); string responseMessage = System.Configuration.ConfigurationManager.AppSettings["UDP" + numberOfRouter] + "#" + MessageNames.CONNECTION_REQUEST + "#OK" + "#" + "CC#"; SendingMessageCC(address, responseMessage); Console.WriteLine("[" + Timestamp.generateTimestampRCC() + "] Message new registry to table {0} ", "COMUTATION_TABLE" + " Frequency: " + message[10] + " port_in: " + message[5] + " port_out: " + message[7]); } else if (message[3] == "BORDERTABLE") { Console.WriteLine("[" + Timestamp.generateTimestampRCC() + "] Received message filling BorderNodeCommutationTable from CC " + message[0]); string responseMessage = System.Configuration.ConfigurationManager.AppSettings["UDP" + numberOfRouter] + "#" + MessageNames.CONNECTION_REQUEST + "#OK" + "#" + "CC#"; BorderNodeCommutationTableRow newRow = new BorderNodeCommutationTableRow( message[4], Convert.ToInt16(message[5]), Convert.ToInt16(1), Convert.ToInt16(message[7]), Convert.ToInt16(7), Convert.ToInt16(1), message[6], Convert.ToInt16(2), Convert.ToInt16(1)); borderNodeCommutationTable.Table.Add(newRow); // SendingMessageCC(address, responseMessage); Console.WriteLine("[" + Timestamp.generateTimestampRCC() + "] Message new registry to table {0} ", "BORDER_NODE_COMUTATION " + "Frequency: " + message[7] + " port_in " + message[5]); } } }
public void fillingTable(string line, Socket socketsending, string key) { //Znaki oddzielające poszczególne części żądania klienta. char[] delimiterChars = { '#' }; //Podzielenie żądania na tablicę stringów. string[] words; words = line.Split(delimiterChars); switch (words[0]) { case "ADD": switch (Int32.Parse(words[1])) { //Dodawanie wpisu do BorderComutationTable case 1: BorderNodeCommutationTableRow newRow = new BorderNodeCommutationTableRow( words[2], Convert.ToInt16(words[3]), Convert.ToInt16(words[4]), Convert.ToInt16(words[5]), Convert.ToInt16(words[6]), Convert.ToInt16(words[7]), words[8], Convert.ToInt16(words[9]), Convert.ToInt16(words[10])); borderNodeCommutationTable.Table.Add(newRow); stateReceivedMessageFromNMS("BorderNodeCommutationTable", "ADD"); break; //Dodanie wpisu do EONTable case 2: EONTableRowIN eonIN = new EONTableRowIN(Convert.ToInt16(words[2]), Convert.ToInt16(words[3])); EONTableRowOut eonOut = new EONTableRowOut(Convert.ToInt16(words[4]), Convert.ToInt16(words[5])); bool eoninbool = eonTable.addRow(eonIN); bool eonoutbool = eonTable.addRow(eonOut); if (eoninbool == false || eonoutbool == false) { sendingMessageCommunication(OperationConfiguration.getSetting(key, mySettings), "ERROR", socketsending); } else { stateReceivedMessageFromNMS("EONTable", "ADD"); } break; //Dodanie wpisu do CommutationTable case 3: CommutationTableRow commuteRow = new CommutationTableRow(Convert.ToInt16(words[2]), Convert.ToInt16(words[3]), Convert.ToInt16(words[4]), Convert.ToInt16(words[5])); commutationTable.Table.Add(commuteRow); stateReceivedMessageFromNMS("CommutationTable", "ADD"); break; default: break; } break; case "DELETE": switch (Int32.Parse(words[1])) { //Dodawanie wpisu do BorderComutationTable case 1: BorderNodeCommutationTableRow newRow = new BorderNodeCommutationTableRow(); newRow = borderNodeCommutationTable.FindRow(words[2], Convert.ToInt16(words[3]), words[4]); borderNodeCommutationTable.Table.Remove(newRow); stateReceivedMessageFromNMS("BorderNodeCommutationTable", "DELETE"); break; //Dodanie wpisu do EONTable case 2: EONTableRowIN eonIN = new EONTableRowIN(Convert.ToInt16(words[2]), Convert.ToInt16(words[3])); EONTableRowOut eonOut = new EONTableRowOut(Convert.ToInt16(words[4]), Convert.ToInt16(words[5])); bool eoninbool = eonTable.deleteRow(eonIN); bool eonoutbool = eonTable.deleteRow(eonOut); if (eoninbool == false || eonoutbool == false) { sendingMessageCommunication(OperationConfiguration.getSetting(key, mySettings), "ERROR", socketsending); } else { stateReceivedMessageFromNMS("EONTable", "DELETE"); } break; //Dodanie wpisu do CommutationTable case 3: CommutationTableRow rowToDelete = new CommutationTableRow(); rowToDelete = commutationTable.FindRow(Convert.ToInt16(words[2]), Convert.ToInt16(words[3])); commutationTable.Table.Remove(rowToDelete); stateReceivedMessageFromNMS("CommutationTable", "DELETE"); break; default: break; } break; case "TOPOLOGY": switch (Int32.Parse(words[1])) { case 1: //Dodawanie wpisu do BorderComutationTable for (int i = 0; i < borderNodeCommutationTable.Table.Count; i++) { byte[] table_in_bytes = null; string builder = string.Empty; string port_in = string.Empty; string port_out = string.Empty; string Hops = string.Empty; string command = string.Empty; string band_out = string.Empty; string destination_IP = string.Empty; string Modulation = string.Empty; string BitRate = string.Empty; string IP_IN = string.Empty; string Frequency_out = string.Empty; command = "TOPOLOGY"; IP_IN = borderNodeCommutationTable.Table[i].IP_IN.ToString(); port_in = borderNodeCommutationTable.Table[i].port_in.ToString(); band_out = borderNodeCommutationTable.Table[i].band.ToString(); Frequency_out = borderNodeCommutationTable.Table[i].frequency.ToString(); Modulation = borderNodeCommutationTable.Table[i].modulationPerformance.ToString(); BitRate = borderNodeCommutationTable.Table[i].bitRate.ToString(); destination_IP = borderNodeCommutationTable.Table[i].IP_Destination.ToString(); port_out = borderNodeCommutationTable.Table[i].Port.ToString(); Hops = borderNodeCommutationTable.Table[i].hopsNumber.ToString(); builder = command + "#" + "1" + "#" + IP_IN + "#" + port_in + "#" + band_out + "#" + Frequency_out + "#" + Modulation + "#" + BitRate + "#" + destination_IP + "#" + port_out + "#" + Hops; sendingMessageCommunication(OperationConfiguration.getSetting(key, mySettings), builder, socketsending); } break; //Dodanie wpisu do EONTable case 2: for (int i = 0; i < eonTable.TableIN.Count; i++) { byte[] table_in_bytes = null; string builder = string.Empty; ; string command = string.Empty; string band_in = string.Empty; string frequency_out = string.Empty; string band_out = string.Empty; string frequency_in = string.Empty; command = "TOPOLOGY"; frequency_in = eonTable.TableIN[i].busyFrequency.ToString(); band_in = eonTable.TableIN[i].busyBandIN.ToString(); frequency_out = eonTable.TableOut[i].busyFrequency.ToString(); band_out = eonTable.TableOut[i].busyBandOUT.ToString(); builder = command + "#" + "2" + "#" + frequency_in + "#" + band_in + "#" + frequency_out + "#" + band_out; sendingMessageCommunication(OperationConfiguration.getSetting(key, mySettings), builder, socketsending); } break; //Dodanie wpisu do CommutationTable case 3: for (int i = 0; i < commutationTable.Table.Count; i++) { byte[] table_in_bytes = null; string command = string.Empty; string builder = string.Empty; string port_in = string.Empty; string port_out = string.Empty; string Frequency_in = string.Empty; string frequency_out = string.Empty; command = "TOPOLOGY"; port_in = commutationTable.Table[i].port_in.ToString(); frequency_out = commutationTable.Table[i].frequency_out.ToString(); Frequency_in = commutationTable.Table[i].frequency_in.ToString(); port_out = commutationTable.Table[i].port_out.ToString(); builder = command + "#" + "3" + "#" + Frequency_in + "#" + port_in + "#" + frequency_out + "#" + port_out; sendingMessageCommunication(OperationConfiguration.getSetting(key, mySettings), builder, socketsending); } break; default: break; } break; default: break; } // Console.ReadKey(); }
/// <summary> /// Funkcja przetwarzajaca pakiety. Nie dziala dobrze! /// </summary> /// <param name="packageBytes"></param public List<Queue<byte[]>> processPackage(byte[] packageBytes) { //jezeli bufor jest prawie pelny (brakuje mu jeden pakiet) if (bufferIn.queue.Count == maxBuffInSize - 1) { //dodanie do bufora pakietu bufferIn.queue.Enqueue(packageBytes); //Wyprozniamy bufor wejsciowy i zapisujemy jego stan do tego listOfQUeues var listOfQueues = bufferIn.emptyBufferIN(); //do zwrotu wartosci lista o maksymalnej wielkosci rownej ilosci buforow wyjsciowych List<Queue<byte[]>> returnListOfQueues = new List<Queue<byte[]>>(); for (int k = 0; k < BuffersOut.Count; k++) { returnListOfQueues.Add(new Queue<byte[]>()); } //ale listOfQueues powinno miec zawsze 3 kolejki na I etapie... for (int i = 0; i < listOfQueues.Count; i++) { //Jak jeden pakiet ma ustawiona czestotliwosc na -1, to jest szansa, ze wszystkie maja i //Jezeli wszystkie pakiety posiadaja -1 w czestotliwosci if (Package.extractFrequency(listOfQueues[i].Peek()) == -1 && Buffer.checkIfAllPackagesFrequency(listOfQueues[i], -1)) { //Sprawdzanie w tablicach komutacji routera i wpisywanie do naglowkow odpowiednich wpisow List<Queue<byte[]>> copyList = new List<Queue<byte[]>>(); copyList.Add(listOfQueues[i]); listOfQueues[i] = new Queue<byte[]>(borderNodeCommutationTable.changeHeaderForMessagesFromClient( (copyList[i]))); //Nowa, zmieniona czestotliwosc. //TODO: Na razie jest jedna, a na drugi etap trzeba bedzie przygotowac sortowanie, dzielenie i //TODO: dodawanie do konkretnych kolejek //Podpatrujemy na jakas czestotliwosc z pakietu short freq = Package.extractFrequency(listOfQueues[i].Peek()); //sprawdzamy, czy wszystkie czestotliwosci sa takie same if (Package.extractFrequency(listOfQueues[i].Peek()) == freq && Buffer.checkIfAllPackagesFrequency(listOfQueues[i], freq)) { //szukanie takiej kolejki, ze wierzchni wpis ma interesujaca nas czestotliwosc var queue = listOfQueues.Find(q => Package.extractFrequency(q.Peek()) == freq); //TODO: Jak sprawdzic, na ktory bufor wyjsciowy skierowac te pakiety co wczesniej mialy -1? // BuffersOut.Add(new Buffer(listOfQueues[i].Count)); //A gdy nie udalo sie znalezc, to dodajemy elementy kolejki z wczesniejszymi "-1" do kolejki z freq if (queue == null) { int iterator = 0; iterator = listOfQueues[i].Count(); while (iterator > 0) { //TODO: asynchronicznie dodawaj po jednym pakiecie do bufora wyjsciowego //Zdejmowanie z jednej kolejki i dopisywanie do drugiej. Nie trzeba znowu sortowac - pakiety z //"-1" maja prawdopodobnie inne pochodzenie queue.Enqueue(listOfQueues[i].Dequeue()); iterator--; } } } else { //Rzucamy wyjatek gdy czestotliwosci nie sa takie same throw new Exception( "CommutationField.processPackage(): Zamienione czestotliwosci z -1 na inna nie sa takie same!"); } } else { //Sprawdzanie w tablicach komutacji routera i wpisywanie do naglowkow odpowiednich wpisow List<Queue<byte[]>> copyList = new List<Queue<byte[]>>(); copyList.Add(listOfQueues[i]); listOfQueues[i] = new Queue<byte[]>(commutationTable.changeHeaderForMessagesFromClient( (copyList[i]))); //Rzad tablicy komutacji, ktory odpowiada czestotliwosci i numerowi portu //var row = commutationTable.FindRow(Package.extractFrequency(joinedQueue.Peek()), // Package.extractPortNumber(joinedQueue.Peek())); //short frequency_out = row.frequency_out; //short port_out = row.port_out; } //jak nie ma -1 w czestoltiwosci, to wchodzimy jeszcze raz w petle // else // { //Nowa, pusta kolejka Queue<byte[]> tempBuffOutQueue; //Czy juz bylo kopiowane do tempa? bool hasBeenCopied = false; //Dla kazdego pakietu w kolejce bedzie usuwana z listOfQueues[i] i dodawana do bufora. while (listOfQueues[i].Count > 0) { //Jezeli bufor jest przepelniony, to skopiuje do tempa cala zawartosc bufora i bufor sie //wyprozni. Jezeli nie jest przepelniony, to funkcja addPackage zwroci null i wtedy //temp po prostu bedzie pusty. tempBuffOutQueue = BuffersOut[i].addPackage(listOfQueues[i].Dequeue()); if (tempBuffOutQueue == null) continue; else { //Jak jeszcze nie kopiowalismy z tempa do tablicy returnListOfQueues, to kopiujemy if (!hasBeenCopied) { //Kopiowanie do listy wyjsciowej zawartosci tempa (przez kopie!) returnListOfQueues[i] = new Queue<byte[]>(tempBuffOutQueue); //Petla dziala dalej, a bufor wyjsciowy pola komutacyjnego sie zapelnia. hasBeenCopied = true; } //A jak juz kopiowalismy, dodajemy znowu zawartosc tempa na koniec listy else { returnListOfQueues.Add(new Queue<byte[]>(tempBuffOutQueue)); //W sumie niepotrzebne hasBeenCopied = false; } } } //Kopiowanie z podkolejek do kolejnych buforow wyjsciowych //BuffersOut[i].queue = new Queue<byte[]>(listOfQueues[i]); var tmp = new Queue<byte[]>(returnListOfQueues[i]); //sortowanie kolejek wedlug ID returnListOfQueues[i] = Buffer.sortQueueByID(ref tmp); tmp = new Queue<byte[]>(returnListOfQueues[i]); //Lista podkolejek o pakietach o tym samym ID var listOfSameIDQueues = Buffer.divideSortedQueueByID(ref tmp); //Kazda z tych podkolejek sortuje wedlug numeru pakietu for (int j = 0; j < listOfSameIDQueues.Count; j++) { var temp = listOfSameIDQueues[j]; //Sortowanie po numerze pakietu listOfSameIDQueues[j] = new Queue<byte[]>(Buffer.sortQueueByPackageNumber(ref temp)); } //Sklejanie kolejek z powrotem var joinedQueue = new Queue<byte[]>(Buffer.joinSortedByPackageNumberQueues(listOfSameIDQueues)); //TODO: Zmien to. Trzeba zajrzec w tablice komutacji i skierowac na odpowiedni bufor. //BuffersOut[i].queue = joinedQueue; //Rzad tablicy komutacji, ktory odpowiada czestotliwosci i numerowi portu /* var row = commutationTable.FindRow(Package.extractFrequency(joinedQueue.Peek()), Package.extractPortNumber(joinedQueue.Peek()));*/ //short frequency_out = row.frequency_out; //short port_out = row.port_out; //Jesli pakiety maja -1 w czestotliwosciach // if (Package.extractFrequency(joinedQueue.Peek()) == 1) // { //TODO: To jest wpisane z palca na razie, ale potem trzeba bedzie zrobic tak: //joinedQueue = new Queue<byte[]>( borderNodeCommutationTable.changeHeaderForMessagesFromClient(joinedQueue)); // Package P = new Package(joinedQueue.Dequeue()); // P.changeFrequency(-1); // P.changePort(3); // joinedQueue.Enqueue(P.toBytes()); // } //Wpisanie naglowkow do kolejki z pakietami czestotliwosci i portu wyjsciowego. //Chmurka juz bedzie wiedziala, jak pokierowac pakiety z tej kolejki. //joinedQueue = commutationTable.changeHeaderForMessagesFromClient(joinedQueue); //Kopiowanie kolejki do listy zwracanej. returnListOfQueues[i] = new Queue<byte[]>(joinedQueue); // } } //TIMER /* //Task, który służy wprowadzeniu opóźnienia między kolejnymi wysłanymi pakietami var delay = Task.Run(async () => { Stopwatch sw = Stopwatch.StartNew(); await Task.Delay(300); sw.Stop(); return sw.ElapsedMilliseconds; }); */ //Po odczekaniu tego czasu wyprozniamy bufory. for (int i = 0; i < BuffersOut.Count; i++) { //Kopiowanie zawartosci bufora do zwracanej listy (tworzenie nowego elementu tej listy) returnListOfQueues.Add(new Queue<byte[]>(BuffersOut[i].queue)); //czyszczenie bufora BuffersOut[i].queue.Clear(); } return returnListOfQueues; } //Jak bufor wejsciowy nie jest przepelniony else { byte[] msg = new byte[64]; msg = packageBytes; Package p = new Package(msg); BorderNodeCommutationTableRow borderRow = null; borderRow = borderNodeCommutationTable.Table.Find(rowe => (rowe.IP_IN.ToString() == p.IP_Source.ToString() && (rowe.port_in == p.portNumber) && (rowe.IP_Destination.ToString() == p.IP_Destination.ToString()))); //dodanie do bufora pakietu if (borderRow != null) { bufferIn.queue.Enqueue(packageBytes); } return null; } }
public void fillingTable(string line) { //Znaki oddzielające poszczególne części żądania klienta. char[] delimiterChars = { '#' }; //Podzielenie żądania na tablicę stringów. string[] words; words = line.Split(delimiterChars); switch (words[0]) { case "ADD": switch (Int32.Parse(words[1])) { //Dodawanie wpisu do BorderComutationTable case 1: BorderNodeCommutationTableRow newRow = new BorderNodeCommutationTableRow( words[2], Convert.ToInt16(words[3]), Convert.ToInt16(words[4]), Convert.ToInt16(words[5]), Convert.ToInt16(words[6]), Convert.ToInt16(words[7]), words[8], Convert.ToInt16(words[9]), Convert.ToInt16(words[10])); borderNodeCommutationTable.Table.Add(newRow); stateReceivedMessageFromNMS("BorderNodeCommutationTable", "ADD"); break; //Dodanie wpisu do EONTable case 2: EONTableRowIN eonIN = new EONTableRowIN(Convert.ToInt16(words[2]), Convert.ToInt16(words[3])); EONTableRowOut eonOut = new EONTableRowOut(Convert.ToInt16(words[4]), Convert.ToInt16(words[5])); eonTable.addRow(eonIN); eonTable.addRow(eonOut); stateReceivedMessageFromNMS("EONTable", "ADD"); break; //Dodanie wpisu do CommutationTable case 3: CommutationTableRow commuteRow = new CommutationTableRow(Convert.ToInt16(words[2]), Convert.ToInt16(words[3]), Convert.ToInt16(words[4]), Convert.ToInt16(words[5])); commutationTable.Table.Add(commuteRow); stateReceivedMessageFromNMS("CommutationTable", "ADD"); break; default: break; } break; case "DELETE": switch (Int32.Parse(words[1])) { //Dodawanie wpisu do BorderComutationTable case 1: BorderNodeCommutationTableRow newRow = new BorderNodeCommutationTableRow(); newRow = borderNodeCommutationTable.FindRow(words[2], Convert.ToInt16(words[3]), words[4]); borderNodeCommutationTable.Table.Remove(newRow); stateReceivedMessageFromNMS("BorderNodeCommutationTable", "DELETE"); break; //Dodanie wpisu do EONTable case 2: EONTableRowIN eonIN = new EONTableRowIN(Convert.ToInt16(words[2]), Convert.ToInt16(words[3])); EONTableRowOut eonOut = new EONTableRowOut(Convert.ToInt16(words[4]), Convert.ToInt16(words[5])); eonTable.deleteRow(eonIN); eonTable.deleteRow(eonOut); stateReceivedMessageFromNMS("EONTable", "DELETE"); break; //Dodanie wpisu do CommutationTable case 3: CommutationTableRow rowToDelete = new CommutationTableRow(); rowToDelete = commutationTable.FindRow(Convert.ToInt16(words[2]), Convert.ToInt16(words[3])); commutationTable.Table.Remove(rowToDelete); stateReceivedMessageFromNMS("CommutationTable", "DELETE"); break; default: break; } break; default: break; } // Console.ReadKey(); }