Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }