syntax = "proto3";
  

package importer;

import "google/protobuf/empty.proto";
//import "google/api/annotations.proto";


message DeviceInfo {
	string ip_address = 1;
	uint32 frequency = 2;
        string vendor = 3;
	string protocol = 4;
}

message EventList {
	string event_ip_address = 1;
        repeated string events = 2;
}

message SupportedEventList {
        repeated string events = 1;
}

service device_management {
    rpc SendDeviceInfo(DeviceInfo) returns (google.protobuf.Empty) {}

    rpc SetFrequency(DeviceInfo) returns (google.protobuf.Empty) {}

    rpc GetEventList(DeviceInfo) returns (SupportedEventList) {}

    rpc SubsrcribeGivenEvents(EventList)  returns (google.protobuf.Empty) {}

    rpc UnSubsrcribeGivenEvents(EventList) returns (google.protobuf.Empty) {}
}



