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