added a type to Package and added GenericPackage
This forces you to use cast to if you want to force the package to have a specific type
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package kernel.net;
|
||||
|
||||
import kernel.net.Package.GenericPackage;
|
||||
import kernel.gps.GPS;
|
||||
import haxe.ds.ReadOnlyArray;
|
||||
import kernel.net.Package.NetworkID;
|
||||
@@ -25,8 +26,8 @@ class Net {
|
||||
public static inline final DEFAULT_TTL:Int = 10;
|
||||
|
||||
public final networkID:NetworkID = OS.getComputerID();
|
||||
private final responseBus:Map<Int, Callback<Outcome<Package,Error>>> = new Map();
|
||||
private final protoHandlers:Map<String, Callback<Package>> = new Map();
|
||||
private final responseBus:Map<Int, Callback<Outcome<GenericPackage,Error>>> = new Map();
|
||||
private final protoHandlers:Map<String, Callback<GenericPackage>> = new Map();
|
||||
private var interfaces:Array<INetworkInterface>;
|
||||
|
||||
@:allow(kernel.Init)
|
||||
@@ -68,7 +69,7 @@ class Net {
|
||||
/**
|
||||
Called when a new package comes in.
|
||||
**/
|
||||
private function handle(pack:Package,interf: INetworkInterface, ?dist: Float) {
|
||||
private function handle(pack:GenericPackage,interf: INetworkInterface, ?dist: Float) {
|
||||
if (pack.toID == this.networkID || pack.toID == Net.BRODCAST_PORT){
|
||||
switch pack.type {
|
||||
case Data(_) | DataNoResponse(_):
|
||||
@@ -81,14 +82,14 @@ class Net {
|
||||
}
|
||||
case RouteDiscover(_) | RouteDiscoverResponse(_) | RouteDiscoverUpdate(_):
|
||||
// Delegate to Routing
|
||||
Routing.instance.handleRoutePackage(pack,interf);
|
||||
Routing.instance.handleRoutePackage(cast pack,interf);
|
||||
case GPSRequest | GPSResponse(_):
|
||||
if (dist == null) {
|
||||
Log.silly("Got a GPS package but no distance was provided");
|
||||
return;
|
||||
}
|
||||
// Delegate to GPS
|
||||
GPS.instance.handlePackage(pack,dist,interf);
|
||||
GPS.instance.handlePackage(cast pack,dist,interf);
|
||||
}
|
||||
}else{
|
||||
// New message received but its not ment for us. Forward if possible.
|
||||
@@ -104,7 +105,7 @@ class Net {
|
||||
Send a message. Dont care if its reaches its destination nor it has a response.
|
||||
**/
|
||||
public function sendAndForget(dest:Int, proto:String, data:Dynamic) {
|
||||
var pack:Package = {
|
||||
var pack:GenericPackage = {
|
||||
toID: dest,
|
||||
fromID: networkID,
|
||||
msgID: generateMessageID(),
|
||||
@@ -116,7 +117,7 @@ class Net {
|
||||
sendRaw(pack);
|
||||
}
|
||||
|
||||
private function forwardPackage(pack: Package) {
|
||||
private function forwardPackage(pack: GenericPackage) {
|
||||
if (pack.ttl == 0){
|
||||
|
||||
if (pack.type.match(Data(_))) {
|
||||
@@ -136,7 +137,7 @@ class Net {
|
||||
}
|
||||
}
|
||||
|
||||
public function respondTo(pack:Package, data:Dynamic) {
|
||||
public function respondTo(pack:GenericPackage, data:Dynamic) {
|
||||
if (pack.type.match(DataNoResponse(_))) {
|
||||
Log.warn("Responed to a no response package. Ignoring");
|
||||
return;
|
||||
@@ -150,7 +151,7 @@ class Net {
|
||||
/**
|
||||
Send to package to the localy register handler based on the proto
|
||||
**/
|
||||
private function routeToProto(pack:Package) {
|
||||
private function routeToProto(pack:GenericPackage) {
|
||||
var proto = switch pack.type {
|
||||
case Data(proto):
|
||||
proto;
|
||||
@@ -172,7 +173,7 @@ class Net {
|
||||
Just send the package to the right modem.
|
||||
Returns true if message was send
|
||||
**/
|
||||
private function sendRaw(pack:Package): Bool {
|
||||
private function sendRaw(pack:GenericPackage): Bool {
|
||||
var route = Routing.instance.getRouteToID(pack.toID);
|
||||
if (route == null){
|
||||
return false;
|
||||
@@ -185,9 +186,9 @@ class Net {
|
||||
/**
|
||||
Send a message and wait for a response.
|
||||
**/
|
||||
public function sendAndAwait(dest:NetworkID, proto:String, data:Dynamic):Promise<Package> {
|
||||
return new Promise<Package>((resolve, reject) -> {
|
||||
var pack:Package = {
|
||||
public function sendAndAwait<T>(dest:NetworkID, proto:String, data:T):Promise<GenericPackage> {
|
||||
return new Promise<GenericPackage>((resolve, reject) -> {
|
||||
var pack:GenericPackage = {
|
||||
toID: dest,
|
||||
fromID: networkID,
|
||||
msgID: generateMessageID(),
|
||||
@@ -198,7 +199,7 @@ class Net {
|
||||
|
||||
var timeout:Timer = null;
|
||||
|
||||
responseBus[pack.msgID] = ((reponse:Outcome<Package,Error>) -> {
|
||||
responseBus[pack.msgID] = ((reponse:Outcome<GenericPackage,Error>) -> {
|
||||
|
||||
switch reponse {
|
||||
case Success(pack):
|
||||
@@ -227,7 +228,7 @@ class Net {
|
||||
});
|
||||
}
|
||||
|
||||
public function registerProto(proto:String, callback:Callback<Package>) {
|
||||
public function registerProto(proto:String, callback:Callback<GenericPackage>) {
|
||||
if (protoHandlers.exists(proto)) {
|
||||
// Failed. Handler already exist.
|
||||
// TODO: return error
|
||||
@@ -270,7 +271,7 @@ class Net {
|
||||
|
||||
@:allow(kernel.gps.GPS)
|
||||
private function brodcastGPSRequest() {
|
||||
var pack: Package = {
|
||||
var pack: Package<Noise> = {
|
||||
fromID: networkID,
|
||||
toID: Net.BRODCAST_PORT,
|
||||
ttl: 0, // Prevent forwarding
|
||||
|
||||
Reference in New Issue
Block a user