Example #1
0
 public Data(Data pack)
 {
     Type t = typeof(Data);
     PropertyInfo[] properties = t.GetProperties();
     foreach (PropertyInfo pi in properties)
     {
         pi.SetValue(this, pi.GetValue(pack, null), null);
     }
     _data = pack._data;
 }
Example #2
0
 public StreamHandle(Data packet)
 {
     _streamID = packet.streamID;
     //_fullFilePathAndName = saveFilePath + _streamID + @".txt";
     _fullFilePathAndName = saveFilePath + _streamID;
     try
     {
         fstream = new FileStream(_fullFilePathAndName, FileMode.Create, FileAccess.Write);
     }
     catch (Exception )
     {
         //AddToLog("File Stream: " + ex.Message);
     }
 }
Example #3
0
 public void hendlePacket(Data packet)
 {
     try
     {
         if (packet.streamID == _streamID)
         {
             fstream.Write(packet._data, 0, packet.FrameSize);
         }
         else
         {
             //AddToLog("File Stream: " + "Wrong Stream - ignoring packet");
         }
     }
     catch (Exception)
     {
         //MessageBox.Show("File Stream: " + ex.Message);
         //fstream.Close();
     }
 }
        //*********************************************************************
        public void ParseReceivedPacket(IPacket pack)
        {
            Type _Pt = pack.GetType();

            if (_Pt == typeof(Packets.ConnectionACK))
            {
                Packets.ConnectionACK _ack = (Packets.ConnectionACK)pack;
                if (!_AssociatedWithAPList.Contains(_ack.SSID))
                {
                    _AssociatedWithAPList.Add(_ack.SSID);

                    Thread.Sleep(5);
                }
            }
            else if (_Pt == typeof(Packets.Beacon))
            {
                Packets.Beacon bec = (Packets.Beacon)pack;
                if (!_AccessPoint.Contains(bec.SSID))
                {
                    _AccessPoint.Add(bec.SSID);
                }
                _AccessPoint.Increase(bec.SSID);
                //Thread.Sleep(2);
            }

            else if (_Pt == typeof(Packets.Data))
            {
                Packets.Data dat     = (Packets.Data)pack;
                bool         recieve = dat.PacketID != PrevDataID;

                if (recieve)
                {
                    _DataReceived++;


                    DataAck da = new DataAck(CreatePacket());
                    PrevDataID = dat.PacketID;
                    AP _connecttoAP = GetAPBySSID(_AccessPoint[0].ToString());
                    da.Destination   = _connecttoAP.getMACAddress();
                    da.PacketChannel = this.getOperateChannel();
                    da.PacketBand    = this.getOperateBand();
                    da.Reciver       = dat.Source;
                    DataReceivedContainer.Append(dat.getData() + "\r\n");
                    //Thread.Sleep(2);
                    da.PacketID = dat.PacketID;
                    SendData(da);
                }
                else
                {
                    //  ACK Not received
                    AddToLog("ACK Not received :" + dat.PacketID);
                    DataAck da = new DataAck(CreatePacket());
                    //PrevDataID = dat.PacketID;
                    AP _connecttoAP = GetAPBySSID(_AccessPoint[0].ToString());
                    da.Destination   = _connecttoAP.getMACAddress();
                    da.PacketChannel = this.getOperateChannel();
                    da.PacketBand    = this.getOperateBand();
                    da.Reciver       = dat.Source;
                    //DataReceivedContainer.Append(dat.getData() + "\r\n");
                    //Thread.Sleep(2);
                    DataAckRetransmitted++;
                    da.PacketID = dat.PacketID;
                    SendData(da);
                }
            }
            else if (_Pt == typeof(Packets.DataAck))
            {
                Packets.DataAck dat = (Packets.DataAck)pack;

                if (PrevDataAckID != dat.PacketID)
                {
                    _DataAckReceived++;
                    ackReceived   = true;
                    PrevDataAckID = dat.PacketID;
                }
            }
            else
            {
                //Console.WriteLine("[" + getMACAddress() + "]" + " listening.");
            }
        }
Example #5
0
        //=====================================================================
        /// <summary>
        /// Data routine
        /// </summary>
        /// <param name="pack">Received packet</param>
        private void DataRoutine(Data pack)
        {
            bool add = true, receive = true;
            Queue<Data> temporaryQ;

            lock (Sync)
            {
                temporaryQ = (Queue<Data>)_packet_queues[pack.Reciver];

                try
                {
                    if (temporaryQ != null)
                    {
                        if (temporaryQ.Count < MAX_QUEUE_SIZE)
                        {
                            if (temporaryQ.Any(value => value.GuidD.Equals(pack.GuidD)))
                            {
                                add = false;
                            }
                        }
                        else
                        {
                            add = false;
                            receive = false;
                        }
                    }
                }
                catch (Exception ex) { AddToLog("DataRoutine " + ex.Message); }
            }

            Data resendedData = null;

            if (receive && add)
            {
                MACsandACK(pack.Source, pack.GuidD, pack.getTransmitRate());

                resendedData = new Data((Data)pack)
                {
                    Destination     = pack.Reciver,
                    X               = this.x,
                    Y               = this.y,
                    GuidD           = pack.GuidD,
                    Source          = this.getMACAddress()
                };
                resendedData.setTransmitRate(pack.getTransmitRate());
            }

            if (add)
            {
                lock (Sync)
                {
                    if (temporaryQ != null) temporaryQ.Enqueue(resendedData);
                    Monitor.PulseAll(Sync);
                }
                DataReceived++;
            }
        }