public void Listener() { Task.Run(async() => { using var updClient = udp; while (true) { var result = await updClient.ReceiveAsync(); try { byte[] resultBytes = result.Buffer; Package package = Package.fromBytes(resultBytes); if (package.isManagementMessage()) { ManagementMessage message = Package.ReceiveManagementMessage(package); if (message.isRoutingTableRequest()) { Logs.LogsReceiveRoutingTableRequest(message); String routeTable = gtJSONAnswer(message); ManagementAnswer answer = ManagementAnswer.RouterAnswer(routeTable); byte[] package1 = Package.RoutingTables(answer).toBytes(); Logs.LogsSendRoutingTable(message); udp.Send(package1, package1.Length, message.getRequesterEndPoint()); } } } catch (Exception e) { Logs.LogsManagementException(e); } } }); }
public static Dictionary <int, NHLFE.NHFLERow> setRoutingTables(ManagementAnswer answer) { Dictionary <int, NHLFE.NHFLERow> ComutationList = new Dictionary <int, NHLFE.NHFLERow>(); String jsonFile = answer.answer; NHLFE.NHFLETableModel TableModel = JsonSerializer.Deserialize <NHLFE.NHFLETableModel>(jsonFile); ComutationList = new Dictionary <int, NHLFE.NHFLERow>(); try { foreach (NHLFE.NHFLEEntry element in TableModel.NHLFEEntries) { ComutationList.Add(element.id, new NHLFE.NHFLERow(element.port_in, element.label_in, element.port_out, element.label_out, element.StackPtr, element.method, element.next_id)); } } catch (Exception e) { Console.WriteLine(e); } return(ComutationList); }
public void listener() { Task.Run(async() => { using (var updClient = udp) { while (true) { var result = await updClient.ReceiveAsync(); Package package = Package.fromBytes(result.Buffer); if (package.isRoutingCommunication() && nhfletable_set == false) { ManagementAnswer answer1 = Package.ReceiveRoutingTables(package); ComutationList = NHLFE.setRoutingTables(answer1); nhfletable_set = true; Logs.LogsReceiveRoutingTable(Name); } if (package.isMPLS()) { if (nhfletable_set) { MPLSPackage MPLSpackage = Package.ReceiveMPLSPackage(package); Console.WriteLine($"otrzymany TTL: {MPLSpackage.GetTTL()}"); MPLSpackage.decrementTTL(); if (MPLSpackage.GetTTL() > 0) { Logs.LogsRouterReceivePackage(MPLSpackage, Name); var InPort = MPLSpackage.GetPort(); int label = MPLSpackage.GetLastLabel(); int row_id = get_nhfle_row_id(InPort, label); if (row_id > -1) { switch (ComutationList[row_id].method) { case "swap": MPLSpackage.swap(ComutationList[row_id].label_out, ComutationList[row_id].port_out); break; case "push": push(ComutationList[row_id], MPLSpackage); break; case "pop": pop(ComutationList[row_id], MPLSpackage); break; } Console.WriteLine($"wysyłany TTL: {MPLSpackage.GetTTL()}"); Package package1 = Package.MPLSPackage_(MPLSpackage); Logs.LogsRouterSendPackage(MPLSpackage, Name); udp.Send(package1.toBytes(), package1.toBytes().Length, CableCloudEndPoint); } else { Console.WriteLine("Podana etykieta jest niepoprawna"); } //Thread.Sleep(1000); } } } else if (package.isTerminateOrder()) { Environment.Exit(0); } } } }); }