public async Task<bool> Write(ValueList[] vl)
        {
            for (int i = 0; i < vl.Length; i++)
            {
                await WriteSingle(vl[i]);
            }

            //Write gets called every x seconds
            //to make sure data arrives as soon as possible, we flush the writer
            await Flush();
            return true;
        }
        public void Process(ValueList vl)
        {
            logger.Debug("Process: time = {0}, interval = {1}; host = {2}; plugin = {3}; plugin_instance = {4}; type = {5}; type_instance = {6};",
                vl.Time,
                vl.Interval,
                vl.Host,
                vl.Plugin,
                vl.PluginInstance,
                vl.Type,
                vl.TypeInstance);

            broadcast.Post(vl);
        }
        private async Task WriteSingle(ValueList vl)
        {
            int len = writer.Size;
            writer.Write(vl);

            if (writer.Size >= Protocol.BufferSize)
            {
                await client.SendAsync(writer.Bytes, len, host, port);

                writer.Reset();
                writer.Write(vl);
            }
        }
        public void Write(ValueList data)
        {
            WriteString(Protocol.TypeHost, data.Host);
            WriteNumber(Protocol.TypeTime, (uint)(data.Time / 1000));
            WriteString(Protocol.TypePlugin, data.Plugin);
            WriteString(Protocol.TypePluginInstance, data.PluginInstance);
            WriteString(Protocol.TypeType, data.Type);
            WriteString(Protocol.TypeTypeInstance, data.TypeInstance);

            List<DataSource> ds = TypesDB.Instance.GetType(data.Type);

            WriteNumber(Protocol.TypeInterval, data.Interval);
            WriteValues(ds, data.Values);
        }