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 SubscribeGivenEvents(GivenEventList)  returns (google.protobuf.Empty) {}

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

    rpc GetCurrentEventList(Device) returns (EventList) {}

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

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



