/// <summary> /// Compares two SocketOutlet for equality. /// </summary> /// <param name="SocketOutlet">An SocketOutlet to compare with.</param> /// <returns>True if both match; False otherwise.</returns> public Boolean Equals(SocketOutlet SocketOutlet) { if ((Object)SocketOutlet == null) { return(false); } return(Plug.Equals(SocketOutlet.Plug) && Cable.Equals(SocketOutlet.Cable) && CableLength.Equals(SocketOutlet.CableLength)); }
public static void ReceiveCallBack(IAsyncResult asyncResult) { StateObject state = (StateObject)asyncResult.AsyncState; Socket handler = state.workSocket; //socket of client int ReadBytes; try { ReadBytes = handler.EndReceive(asyncResult); } catch (Exception e) { Console.WriteLine(e); throw; } state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, ReadBytes)); var message = state.sb.ToString().Split(' '); if (message[0].Equals("CC-callin")) { IPAddress ip = IPAddress.Parse(message[1]); subnetwork.CC.IPfromSocket.Add(handler, ip); subnetwork.CC.SocketfromIP.Add(ip, handler); subnetwork.RC.nodesToAlgorithm.Add(IPAddress.Parse(message[1])); List <byte> bufferLRM = new List <byte>(); bufferLRM.AddRange(Encoding.ASCII.GetBytes(message[2])); /* for(int j=0; j<bufferLRM.Count;j++) * { * Console.Write(bufferLRM[j] + " "); * * }*/ Console.WriteLine(); /* ushort port1 = (ushort)((bufferLRM[1] << 8) + bufferLRM[0]); * Console.WriteLine(port1); * Console.WriteLine(bufferLRM.Count);*/ byte[] buffer = new byte[16]; int i = 0; while (i < bufferLRM.Count) { buffer = bufferLRM.GetRange(i, 16).ToArray(); ushort port = (ushort)((buffer[1] << 8) + buffer[0]); Console.WriteLine(port); LinkResourceManager LRM = LinkResourceManager.returnLRM(buffer); i += 16; Console.WriteLine("Port: " + LRM.port); subnetwork.RC.lrms.Add(LRM); } } if (message[0].Equals("SET-CONNECTION")) { ushort portS = ushort.Parse(message[1]); ushort portF = ushort.Parse(message[2]); int startSlot = int.Parse(message[3]); int finishSlot = int.Parse(message[4]); int speed = int.Parse(message[5]); int len_from_domain = int.Parse(message[6]); ushort innerPortSource = (ushort)(portS + 1); ushort innerPortDest = (ushort)(portF + 1); ushort sourceInPort = 0; ushort sourceOutPort = 0; ushort destOutPort = 0; ushort destInPort = 0; IPAddress source = null; IPAddress destination = null; Console.WriteLine("ports from domain: " + portS + " " + portF); Console.WriteLine("Start and last slot: " + startSlot + " " + finishSlot); Console.WriteLine("Speed: " + speed); Console.WriteLine("Length from domain: " + len_from_domain); foreach (var cable in subnetwork.RC.cables) { if (cable.port1.Equals(innerPortSource)) { source = cable.Node2; sourceInPort = cable.port2; } else if (cable.port2.Equals(innerPortSource)) { source = cable.Node1; sourceInPort = cable.port1; } if (cable.port1.Equals(innerPortDest)) { destination = cable.Node2; destOutPort = cable.port2; } else if (cable.port2.Equals(innerPortDest)) { destination = cable.Node1; destOutPort = cable.port1; } } RoutingResult routingResult = subnetwork.RC.SubentDijkstraAlgorithm(source, destination, subnetwork.RC.cables, subnetwork.RC.lrms, speed, startSlot, finishSlot, len_from_domain); foreach (var node in routingResult.Path) { Cable cable = findCableBetweenNodes(node, destination, subnetwork.RC.cables); if (!cable.Equals(null)) { if (cable.Node1.Equals(destination)) { destInPort = cable.port1; break; } if (cable.Node2.Equals(destination)) { destInPort = cable.port2; break; } } } List <byte> bufferToSend = new List <byte>(); int ct = 0; Socket destSocket = subnetwork.CC.SocketfromIP[destination]; bufferToSend.AddRange(Encoding.ASCII.GetBytes("ACK")); bufferToSend.AddRange(BitConverter.GetBytes(startSlot)); bufferToSend.AddRange(BitConverter.GetBytes(finishSlot)); bufferToSend.AddRange(BitConverter.GetBytes(destOutPort)); bufferToSend.AddRange(BitConverter.GetBytes(destInPort)); destSocket.BeginSend(bufferToSend.ToArray(), 0, bufferToSend.ToArray().Length, 0, new AsyncCallback(SendCallBack), destSocket); bufferToSend.Clear(); foreach (var cab in routingResult.nodeAndPortsOut) { if (cab.Key.Equals(source)) { Socket socket1 = subnetwork.CC.SocketfromIP[cab.Key]; sourceOutPort = cab.Value; bufferToSend.AddRange(Encoding.ASCII.GetBytes("ACK")); bufferToSend.AddRange(BitConverter.GetBytes(startSlot)); bufferToSend.AddRange(BitConverter.GetBytes(finishSlot)); bufferToSend.AddRange(BitConverter.GetBytes(sourceOutPort)); bufferToSend.AddRange(BitConverter.GetBytes(sourceInPort)); socket1.BeginSend(bufferToSend.ToArray(), 0, bufferToSend.ToArray().Length, 0, new AsyncCallback(SendCallBack), socket1); bufferToSend.Clear(); continue; } bool flaga = false; Socket socket = subnetwork.CC.SocketfromIP[cab.Key]; Console.WriteLine("Adres: " + cab.Key + " port out: " + cab.Value); foreach (var cab1 in routingResult.nodeAndPortsIn) { if (cab1.Key.Equals(cab.Key)) { Console.WriteLine("Port in: " + cab1.Value); bufferToSend.AddRange(Encoding.ASCII.GetBytes("ACK")); bufferToSend.AddRange(BitConverter.GetBytes(startSlot)); bufferToSend.AddRange(BitConverter.GetBytes(finishSlot)); bufferToSend.AddRange(BitConverter.GetBytes(cab.Value)); bufferToSend.AddRange(BitConverter.GetBytes(cab1.Value)); socket.BeginSend(bufferToSend.ToArray(), 0, bufferToSend.ToArray().Length, 0, new AsyncCallback(SendCallBack), socket); bufferToSend.Clear(); flaga = true; break; } } } Console.WriteLine("Send"); } state.sb.Clear(); handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallBack), state); }