package kernel.net; typedef NetworkID = Int; enum PackageTypes { Data(proto:String); DataNoResponse(proto:String); Response; RouteDiscover(reachableIDs: Array<{id:NetworkID,cost:Int}>); RouteDiscoverResponse(reachableIDs: Array<{id:NetworkID,cost:Int}>); } /** Representing a network package. **/ @:structInit class Package { public final fromID:NetworkID; public final toID:NetworkID; public final msgID:Int; public final type:PackageTypes; public final data:Dynamic; /** Parse package from an `modem_message` event. **/ public static function fromEvent(params:Array):Package { var payload = params[4]; return { fromID: params[3], toID: params[2], msgID: payload.msgID, type: payload.type, data: payload.data, }; } /** Create package that can be used as a response. **/ public function createResponse(newData:Dynamic):Package { return { toID: fromID, fromID: toID, msgID: msgID, type: Response, data: newData }; } /** Wrapper for `Net.instance.respondTo`. **/ public function respond(data:Dynamic) { Net.instance.respondTo(this, data); } }