//===================================================================== /// <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); } }
//********************************************************************* 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."); } }