Ejemplo n.º 1
0
        //=====================================================================
        /// <summary>
        /// Connect routine.Send connection ack and add this mac to Array list
        /// </summary>
        /// <param name="sourceMAC">Sorce MAC address of STA device</param>
        private void ConnectRoutine(string sourceMAC)
        {
            if (!_AssociatedDevices.Contains(sourceMAC))
            {
                _AssociatedDevices.Add(sourceMAC);
            }

            SendConnectionACK(sourceMAC);

            try
            {
                if (!_packet_queues.Contains(sourceMAC))
                {
                    _packet_queues.Add(sourceMAC, new Queue <Data>(1000)); //TODO : Check 1000?
                }
            }
            catch (Exception ex) { AddToLog("CennectRoutine: " + ex.Message); }
        }
Ejemplo n.º 2
0
        //*********************************************************************
        public void ParseReceivedPacket(IPacket pack)
        {
            Type Pt = pack.GetType();

            if (Pt == typeof(Connect))
            {
                Connect _conn = (Connect)pack;
                if (!_AssociatedDevices.Contains(_conn.Source))
                {
                    _AssociatedDevices.Add(_conn.Source);
                }
                SendConnectionACK(_conn.Source);
            }
            else if (Pt == typeof(KeepAlive))
            {
                KeepAlive _wp = (KeepAlive)pack;


                Thread newThread = new Thread(() => UpdateSTAKeepAliveInfoOnReceive(_wp.Source));
                newThread.Start();
            }
            else if (Pt == typeof(Data))
            {
                Data _wp = (Data)pack;
                // Update Keep Alive
                //Thread newThread = new Thread(() => UpdateSTAKeepAliveInfoOnReceive(_wp.Source));
                //newThread.Start();

                DataAck ack = new DataAck(CreatePacket());
                ack.Destination = _wp.Source;
                ack.X           = this.x;
                ack.Y           = this.y;
                ack.PacketID    = _wp.PacketID;
                SendData(ack);
                _wp.Destination = _wp.Reciver;
                _wp.X           = this.x;
                _wp.Y           = this.y;
                AddTXPacket(_wp);
                //SendData(_wp);
                DataReceived++;
            }
            else if (Pt == typeof(DataAck))
            {
                DataAck _wp = (DataAck)pack;

                // Update Keep Alive
                //Thread newThread = new Thread(() => UpdateSTAKeepAliveInfoOnReceive(_wp.Source));
                //newThread.Start();

                //_wp.Destination = _wp.Reciver;
                //_wp.X = this.x;
                //_wp.Y = this.y;
                DeleteTXpacketByID(_wp.PacketID);
                //SendData(_wp);
                DataAckReceived++;
            }
            else
            {
                //Console.WriteLine("[" + getMACAddress() + "]" + " listening.");
            }
        }
        //*********************************************************************
        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.");
            }
        }