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 GivenEventList {
	string event_ip_address = 1;
        repeated string events = 2;
}

message EventList {
        repeated string events = 1;
}

message FreqInfo {
	string IpAddress = 1;
	uint32 Frequency = 2;
}

message VendorInfo {
	string Vendor = 1;
}

message Device {
	string IpAddress = 1;
}


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

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

    rpc GetEventList(VendorInfo) returns (EventList) {}

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

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

    rpc GetCurrentEventList(Device) returns (EventList) {}

    rpc ClearCurrentEventList(Device) returns (google.protobuf.Empty) {}

}



