示例#1
0
        public void addToOutQueue(VirtualContainer4 container)
        {
            STM1 temp = new STM1(container);

            this.output.Enqueue(temp);
            Console.WriteLine("Stm1 added to output queue");
        }
        private void ListenThread(Object client)
        {
            TcpClient    clienttmp = (TcpClient)client;
            BinaryReader reader    = new BinaryReader(clienttmp.GetStream());

            writer     = new BinaryWriter(clienttmp.GetStream());
            LRM.writer = new BinaryWriter(clienttmp.GetStream());

            try
            {
                while (true)
                {
                    string received_data = reader.ReadString();
                    //Console.WriteLine(received_data);
                    JMessage received_object = JMessage.Deserialize(received_data);
                    if (received_object.Type == typeof(Signal))
                    {
                        Signal received_signal = received_object.Value.ToObject <Signal>();
                        if (received_signal.stm1 != null)
                        {
                            this.pathList = received_signal.path;
                            STM1 frame    = received_signal.stm1;
                            int  virtPort = received_signal.port;
                            consoleWriter("received signal on port: " + virtPort);
                            toVirtualPort(virtPort, frame);
                            //Console.WriteLine(received_data);
                        }
                        else if (received_signal.lrmProtocol != null)
                        {
                            string lrmProtocol = received_signal.lrmProtocol;
                            int    port        = received_signal.port;
                            this.lrm.receivedMessage(lrmProtocol, port);
                            //Console.WriteLine(received_data);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                log("\nError sending signal: " + e.Message, ConsoleColor.Red);
                Thread.Sleep(2000);
                Environment.Exit(1);
            }
        }
示例#3
0
 public void clear()
 {
     this.currentFrame = new STM1();
 }
 public void addToInQueue(STM1 frame)
 {
     input.Enqueue(frame);
     Console.WriteLine("Stm1 added to input queue");
 }
        private void commutation()
        {
            while (flag)
            {
                int opt = commOption();

                foreach (IPort iport in this.ports.iports)
                {
                    //check if there is frame in queue and try to process it
                    if (iport.input.Count > 0)
                    {
                        STM1 frame = iport.input.Dequeue();

                        //if (frame.vc4 != null)
                        if (opt != 1)
                        {
                            Console.WriteLine("vc4");
                            int out_pos           = -1;
                            VirtualContainer4 vc4 = frame.vc4;
                            out_pos = switchField.commutateContainer(vc4, iport.port);
                            if (out_pos != -1)
                            {
                                log("ok", ConsoleColor.Green);
                                this.ports.oports[out_pos].addToOutQueue(vc4);
                            }
                        }
                        //else if (frame.vc4.vc3List.Count > 0)
                        else
                        {
                            Console.WriteLine("vc3->vc4");
                            Console.WriteLine("unpacking container");
                            foreach (var vc in frame.vc4.vc3List)
                            {
                                VirtualContainer3 vc3 = vc.Value;
                                if (vc3 != null)
                                {
                                    int[] out_pos = { -1, -1 };
                                    out_pos = switchField.commutateContainer(vc3, iport.port, vc.Key);
                                    if (out_pos[0] != -1)
                                    {
                                        log("ok", ConsoleColor.Green);
                                        this.ports.oports[out_pos[0]].addToTempQueue(vc3, out_pos[1]);
                                    }
                                }
                            }
                        }
                        //else
                        //{
                        //Console.WriteLine("smth wrong with stm1");
                        //}
                    }
                }
                foreach (OPort oport in this.ports.oports)
                {
                    //packing STM from tempQueue to outqueue
                    oport.addToOutQueue();
                }

                foreach (OPort oport in this.ports.oports)
                {
                    //check if there is frame in queue and try to send it
                    if (oport.output.Count > 0)
                    {
                        STM1 frame = oport.output.Dequeue();
                        if (frame.vc4 != null || frame.vc4.vc3List.Count > 0)
                        {
                            try
                            {
                                pathList.Add(this.virtualIp);
                                Signal signal = new Signal(oport.port, frame, pathList);
                                consoleWriter("sending signal port: " + signal.port);
                                string data = JMessage.Serialize(JMessage.FromValue(signal));
                                Console.WriteLine(data);
                                writer.Write(data);
                            }
                            catch (Exception e)
                            {
                                log("\nError sending signal: " + e.Message, ConsoleColor.Red);
                                Thread.Sleep(2000);
                                Environment.Exit(1);
                            }
                        }
                    }
                }
                Thread.Sleep(125);
            }
        }
 private void toVirtualPort(int virtPort, STM1 received_frame)
 {
     ports.iports[virtPort].addToInQueue(received_frame);
 }