public virtual void ProcessEvent(Node node, Event e) { switch (e.Type) { case EventType.RECV: node.Recv((Packet)e.Obj); break; case EventType.SND_BCN: ((Reader)node).SendBeacon(currentTime); break; case EventType.SND_DATA: Packet pkg = (Packet)e.Obj; if (pkg.SrcSenderSeq < 0 && node.type == NodeType.READER)//未定该数据包的id ((Reader)node).InitPacketSeq(pkg); node.SendData(pkg); break; case EventType.CHK_NB: ((Reader)node).CheckNeighbors(); break; case EventType.CHK_NEAR_OBJ: ((Reader)node).CheckNearObjects(); break; case EventType.CHK_PEND_PKT: ((Reader)node).CheckPendingPackets(); break; case EventType.QRY_LOCATION: ((Querier)node).SendQueryRequest((int)e.Obj); break; default: throw new Exception("Unknown event type: " + e.Type); } }