コード例 #1
0
ファイル: Client.cs プロジェクト: schabowsky/EONemulator
        private void Receive(Socket s)
        {
            Socket          handler    = s;
            NetworkStream   stream     = new NetworkStream(handler);
            BinaryFormatter bformatter = new BinaryFormatter();

            SignalLibrary.Signal sg = null;

            while (flag)
            {
                if (stream.DataAvailable == true)
                {
                    try
                    {
                        sg = (SignalLibrary.Signal)bformatter.Deserialize(stream);
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc);
                    }

                    String message = sg.data;

                    logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> {clientName} >> Received from: " + sg.sender + " >> " + message + Environment.NewLine;
                }

                Thread.Sleep(10);
            }
        }
コード例 #2
0
ファイル: Client.cs プロジェクト: schabowsky/EONemulator
        public void Send(string message, string receiver)
        {
            if (cpcc.IsClientConnected(receiver))
            {
                Socket        handler = clientSocket;
                NetworkStream stream  = new NetworkStream(handler);

                double freq             = 235.3;
                SignalLibrary.Signal sg = new SignalLibrary.Signal(clientName, portName, receiver, freq, message);
                if (sg.sender == "K1")
                {
                    if (sg.destination == "K2")
                    {
                        sg.frequency = 235.3;
                    }
                    else if (sg.destination == "K3")
                    {
                        sg.frequency = 236.3;
                    }
                }
                else if (sg.sender == "K2")
                {
                    if (sg.destination == "K1")
                    {
                        sg.frequency = 235.3;
                    }
                    else if (sg.destination == "K3")
                    {
                        sg.frequency = 234.3;
                    }
                }
                else if (sg.sender == "K3")
                {
                    if (sg.destination == "K1")
                    {
                        sg.frequency = 236.3;
                    }
                    else if (sg.destination == "K2")
                    {
                        sg.frequency = 234.3;
                    }
                }
                BinaryFormatter binformatter = new BinaryFormatter();
                binformatter.Serialize(stream, sg);
                stream.Flush();
                stream.Close();
            }
            else
            {
                Task.Run(() => { MessageBox.Show("Client not available."); });
            }
        }
コード例 #3
0
ファイル: NetworkNode.cs プロジェクト: schabowsky/EONemulator
 private void DetranspondSignal(SignalLibrary.Signal signal)
 {
     foreach (CommandLibrary.PortMatch pm in portMatchList)
     {
         if (pm.receivedPort.Equals(signal.lastPort))
         {
             mainWindow.Invoke(new Action(() => Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> {nodeName} >> Redirecting signal from {signal.lastPort} to Client (port {pm.destinationPort}), frequency changed from {signal.frequency} THz to 235.3 THz" + Environment.NewLine));
             signal.modulation  = null;
             signal.lastPort    = pm.destinationPort;
             signal.subcarriers = null;
             signal.frequency   = 235.3;
             break;
         }
     }
 }
コード例 #4
0
ファイル: NetworkNode.cs プロジェクト: schabowsky/EONemulator
        private void TranspondSignal(SignalLibrary.Signal signal)
        {
            foreach (CommandLibrary.PortMatch pm in portMatchList)
            {
                if (pm.receivedPort.Equals(signal.lastPort) && pm.connectionFreq == signal.frequency)
                {
                    double freq = signal.frequency;
                    signal.frequency = (double)((pm.endFreq + pm.startFreq) / 2);
                    mainWindow.Invoke(new Action(() => Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> {nodeName} >> Redirecting signal from Client {signal.sender} (port {signal.lastPort}) to {pm.destinationPort}, frequency changed from {freq} THz to {signal.frequency} THz" + Environment.NewLine));
                    signal.modulation  = pm.modulation;
                    signal.lastPort    = pm.destinationPort;
                    signal.subcarriers = (Int32)((pm.endFreq - pm.startFreq) / 0.00625);

                    break;
                }
            }
        }
コード例 #5
0
        private static Task receive(Socket s, Form1 f)
        {
            Socket          handler    = s;
            NetworkStream   stream     = new NetworkStream(handler);
            BinaryFormatter bformatter = new BinaryFormatter();

            SignalLibrary.Signal sg = null;

            while (true)
            {
                string timestamp = DateTime.UtcNow.ToString("HH:mm:ss.fff");
                int    port      = 0;
                string id        = null;
                int    nextPort  = 0;
                string nextId    = null;

                if (stream.DataAvailable == true)
                {
                    try
                    {
                        sg = (SignalLibrary.Signal)bformatter.Deserialize(stream);
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc);
                    }

                    port = sg.lastPort;

                    foreach (SocketMatch sm in socketMatchList)
                    {
                        if (((IPEndPoint)sm.s.LocalEndPoint).Port.ToString() == ((IPEndPoint)handler.LocalEndPoint).Port.ToString())
                        {
                            id = sm.elementId;
                        }
                    }

                    //sprawdza ID elementu oraz numer portu, na ktory nalezy przekierowac wiadomosc
                    foreach (Link l in linkList)
                    {
                        if (l.sourceId == id && l.sourcePort == port)
                        {
                            nextPort = l.receiverPort;
                            nextId   = l.receiverId;
                        }
                    }

                    f.textBox1.Invoke(new Action(() =>
                    {
                        f.textBox1.AppendText(DateTime.UtcNow.ToString("HH:mm:ss.fff") + " >> Signal received from: " + id + " Port: " + sg.lastPort + Environment.NewLine);
                    }));

                    int    passer     = socketMatchList.FindIndex(x => x.elementId == nextId);
                    Socket tempSocket = socketMatchList[passer].s;

                    if (passer >= 0)
                    {
                        f.textBox1.Invoke(new Action(() =>
                        {
                            f.textBox1.AppendText(DateTime.UtcNow.ToString("HH: mm:ss.fff") + " >> Passing signal to: " + nextId + Environment.NewLine);
                        }));


                        NetworkStream senderStream = new NetworkStream(workingCloudSockets.Find(x => x.RemoteEndPoint == tempSocket.RemoteEndPoint));
                        sg.lastPort = nextPort;
                        bformatter.Serialize(senderStream, sg);
                        senderStream.Flush();
                        senderStream.Close();
                    }
                    else
                    {
                        f.textBox1.Invoke(new Action(() =>
                        {
                            f.textBox1.AppendText(DateTime.UtcNow.ToString("HH:mm:ss.fff") + " >> This port is not connected! End of channel." + Environment.NewLine);
                        }));
                    }
                }
                Thread.Sleep(20);
            }
        }
コード例 #6
0
ファイル: NetworkNode.cs プロジェクト: schabowsky/EONemulator
        private void Receive(Socket s)
        {
            NetworkStream   stream     = new NetworkStream(s);
            BinaryFormatter bformatter = new BinaryFormatter();

            SignalLibrary.Signal signal = null;

            while (true)
            {
                if (stream.DataAvailable == true)
                {
                    try
                    {
                        signal = (SignalLibrary.Signal)bformatter.Deserialize(stream);
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc);
                    }

                    if (signal.frequency == 235.3)
                    {
                        if (signal.destination == "K1")
                        {
                            signal.destination = "A:SN1:SN4:OXC1";
                        }
                        else if (signal.destination == "K2")
                        {
                            signal.destination = "A:SN1:SN17:OXC4";
                        }

                        TranspondSignal(signal);
                        bformatter.Serialize(stream, signal);
                        stream.Flush();
                    }
                    else if (signal.frequency == 234.3)
                    {
                        if (signal.destination == "K1")
                        {
                            signal.destination = "A:SN1:SN4:OXC1";
                        }
                        else if (signal.destination == "K3")
                        {
                            signal.destination = "B:SN2:SN5:OXC6";
                        }

                        TranspondSignal(signal);
                        bformatter.Serialize(stream, signal);
                        stream.Flush();
                    }
                    else if (signal.frequency == 236.3)
                    {
                        if (signal.destination == "K3")
                        {
                            signal.destination = "B:SN2:SN5:OXC6";
                        }
                        else if (signal.destination == "K2")
                        {
                            signal.destination = "A:SN1:SN17:OXC4";
                        }

                        TranspondSignal(signal);
                        bformatter.Serialize(stream, signal);
                        stream.Flush();
                    }
                    else
                    {
                        foreach (CommandLibrary.PortMatch pm in portMatchList)
                        {
                            double cFreq = (double)((pm.endFreq + pm.startFreq) / 2);
                            if (pm.receivedPort.Equals(signal.lastPort) && pm.routerName.Equals(signal.destination) && cFreq == signal.frequency)
                            {
                                DetranspondSignal(signal);
                                bformatter.Serialize(stream, signal);
                                stream.Flush();
                                break;
                            }
                            else if (pm.receivedPort.Equals(signal.lastPort) && cFreq == signal.frequency)
                            {
                                mainWindow.Invoke(new Action(() => Logs += DateTime.UtcNow.ToString("HH:mm:ss.fff") + $" >> {nodeName} >> Redirecting signal from {signal.lastPort} to {pm.destinationPort}, frequency {signal.frequency} THz" + Environment.NewLine));
                                signal.lastPort = pm.destinationPort;
                                bformatter.Serialize(stream, signal);
                                stream.Flush();
                                break;
                            }
                        }
                    }
                }
                Thread.Sleep(10);
            }
        }