public override void Recv(AdHocBaseApp.Packet pkg) { /* if (pkg.PrevType == NodeType.OBJECT || pkg.PrevType == NodeType.READER) { Node node = Node.getNode(pkg.Prev, pkg.PrevType); double dist = pkg.PrevType == NodeType.OBJECT ? global.objectMaxDist : global.nodeMaxDist; if (Utility.Distance(this, (MobileNode)node) > dist) { if (pkg.Next == Id) Console.WriteLine("{0:F4} [{1}] {2}{3} Drop data of {4}{5} due to out of space.", scheduler.currentTime, pkg.Type, this.type, this.Id, node.type, node.Id); //CheckPacketCount(pkg); return; } } * */ //Check the Phenomemon if (pkg.PrevType == NodeType.READER) AddReceivePacketPhenomemon(pkg); if (pkg.PrevType == NodeType.OBJECT) AddReceiveObjectPhenomemon(pkg); //TODO: Other type if ((pkg.Next != Id && pkg.Next != BroadcastNode.Node.Id) || pkg.NextType != NodeType.READER) { if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); return; } //I send the packet myself, ignore if (pkg.Prev == Id && pkg.PrevType == type) { CheckPacketCount(pkg); return; } //中间节点恶意抛弃? if (readerType == ReaderType.DROP_PACKET && pkg.Dst!=Id) { if (pkg.Type == PacketType.DATA || pkg.Type == PacketType.COMMAND) { Console.WriteLine("{0:F4} [{1}] {2}{3} Drop data of {4}{5} due to bad node. packet ident:{6}---{7}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev, pkg.PrevSenderSeq, pkg.SrcSenderSeq); CheckPacketCount(pkg); return; } } switch (pkg.Type) { //Readers case PacketType.BEACON: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvBeacon(pkg); break; //Objects case PacketType.TAG_HEADER: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvTagHeaderResponse(pkg); break; case PacketType.SET_MONITOR: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvSetMonitor(pkg); break; case PacketType.AUTHORIZATION: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvAuthorization(pkg); break; case PacketType.EVENT_REPORT: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvEventReport(pkg); break; case PacketType.GET_MONITOR_REQUEST: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvMonitorRequest(pkg); break; case PacketType.GET_MONITOR_RESPONSE: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvMonitorResponse(pkg); break; case PacketType.COMMAND: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvCommand(pkg); break; //Some codes are hided in the base class. default: base.Recv(pkg); return; } pkg.TTL -= 1; if (pkg.TTL < 0) Drop(pkg); }
public override void Recv(AdHocBaseApp.Packet pkg) { if (pkg.PrevType == NodeType.OBJECT || pkg.PrevType == NodeType.READER) { Node node = Node.getNode(pkg.Prev, pkg.PrevType); if (Utility.Distance(this, (MobileNode)node) > global.nodeMaxDist) { Console.WriteLine("{0:F4} [{1}] {2}{3} Drop data of {4}{5} due to out of space.", scheduler.currentTime, pkg.Type, this.type, this.Id, node.type, node.Id); CheckPacketCount(pkg); return; } } if (pkg.Next != Id || pkg.NextType != NodeType.READER) return; //Self, ignore if (pkg.Prev == Id && pkg.PrevType == type) return; switch (pkg.Type) { //Some codes are hided in the base class. case PacketType.LOGICAL_PATH_UPDATE: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if(pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); if(global.CheckReverseRouteCache) CheckReversePathCache(pkg); RecvLogicalPathUpdate(pkg); break; case PacketType.LOGICAL_PATH_REQUEST: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvLogicalPathQueryRequest(pkg); break; case PacketType.LOGICAL_PATH_REPLY: Console.WriteLine("{0:F4} [{1}] {2}{3} recv from {4}{5}", scheduler.currentTime, pkg.Type, this.type, this.Id, pkg.PrevType, pkg.Prev); if (pkg.PrevType == NodeType.READER) CheckPacketCount(pkg); RecvLogicalPathQueryReply(pkg); break; default: base.Recv(pkg); return; } pkg.TTL -= 1; if (pkg.TTL < 0) Drop(pkg); }