syntax = "proto3";
  

package importer;

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


message DeviceInfo {
	string ip_address = 1;
	uint32 frequency = 2;
}

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 Device {
	string IpAddress = 1;
}

message Empty {}

message DeviceList {
	repeated DeviceInfo device = 1;
}

message DeviceListByIp {
	repeated string Ip = 1;
}

service device_management {
    rpc SendDeviceList(DeviceList) returns (google.protobuf.Empty) {}

    rpc DeleteDeviceList(DeviceListByIp) returns (google.protobuf.Empty) {}

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

    rpc GetEventList(Device) 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) {}

	rpc GetCurrentDevices(Empty) returns (DeviceListByIp) {}
}



