Exemple #1
0
        /// <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);
        }