cc-haxe/src/kernel/net/Package.hx

60 lines
1.3 KiB
Haxe

package kernel.net;
import lib.WorldPos;
typedef NetworkID = Int;
typedef GenericPackage = Package<Dynamic>;
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<T> {
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<T2>(newData:T2):Package<T2> {
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);
}
}