package kernel.net; import lib.WorldPos; typedef NetworkID = Int; typedef GenericPackage = Package; enum PackageTypes { Data(proto:String); DataNoResponse(proto:String); Response; RouteDiscover(reachableIDs:Array<{id:NetworkID, cost:Int}>); RouteDiscoverResponse(reachableIDs:Array<{id:NetworkID, cost:Int}>); RouteDiscoverUpdate(reachableIDs:Array<{id:NetworkID, cost:Int}>); GPSResponse(pos:WorldPos); GPSRequest(); } /** 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:T; public var ttl:Int; public function new(fromID:NetworkID, toID:NetworkID, msgID:Int, type:PackageTypes, data:T, ttl:Int) { this.fromID = fromID; this.toID = toID; this.msgID = msgID; this.type = type; this.data = data; this.ttl = ttl; } /** Create package that can be used as a response. **/ public function createResponse(newData:T2):Package { return { toID: fromID, fromID: toID, msgID: msgID, type: Response, data: newData, ttl: Net.DEFAULT_TTL, }; } /** Wrapper for `Net.respondTo`. **/ public function respond(data:Dynamic) { Net.respondTo(this, data); } }