done and done. wow, way easier.
This commit is contained in:
parent
0636157a02
commit
a6d0ce16a1
@ -12,7 +12,7 @@ namespace franz
|
||||
{
|
||||
public class Telefranz
|
||||
{
|
||||
static class _TelefranzConsumers<T> where T : silver_messages.message, new() {
|
||||
static class _TelefranzConsumers<T> where T : silver_messages.message {
|
||||
internal static readonly Dictionary<Action<T>, Action<KafkaRecord<string, string>>> wrappings
|
||||
= new Dictionary<Action<T>, Action<KafkaRecord<string, string>>>();
|
||||
}
|
||||
@ -78,11 +78,10 @@ namespace franz
|
||||
});
|
||||
}
|
||||
|
||||
public void addHandler<T>(Action<T> theAction) where T : silver_messages.message, new()
|
||||
public void addHandler<T>(Action<T> theAction) where T : silver_messages.message
|
||||
{
|
||||
var dummy = new T();
|
||||
Console.WriteLine($"created dummy, it reports as {dummy}. typeof(T) reports as {typeof(T)}. Topic is {dummy.topic}");
|
||||
var topic = dummy.topic;
|
||||
Console.WriteLine($"typeof(T) reports as {typeof(T)}.");
|
||||
var topic = typeof(T).ToString();
|
||||
|
||||
Action<KafkaRecord<string, string>> wrapped = (kr) =>
|
||||
{
|
||||
@ -99,7 +98,7 @@ namespace franz
|
||||
Console.WriteLine("message didn't deserialize for this handler");
|
||||
}
|
||||
};
|
||||
if(!topicConsumers.ContainsKey(topic)){
|
||||
if(!topicConsumers.ContainsKey(typeof(T).ToString())){
|
||||
Console.WriteLine($"making consumer for {handling_group}, topic {topic}");
|
||||
topicConsumers[topic] = new KafkaConsumer<string, string>(topic, clusterClient);
|
||||
topicConsumers[topic].ConsumeFromLatest();
|
||||
@ -109,22 +108,21 @@ namespace franz
|
||||
_TelefranzConsumers<T>.wrappings[theAction] = wrapped;
|
||||
topicSubscribers[topic]++;
|
||||
}
|
||||
public void removeHandler<T>(Action<T> theAction) where T : silver_messages.message, new()
|
||||
public void removeHandler<T>(Action<T> theAction) where T : silver_messages.message
|
||||
{
|
||||
var dummy = new T();
|
||||
topicConsumers[dummy.topic].MessageReceived -= _TelefranzConsumers<T>.wrappings[theAction];
|
||||
topicConsumers[typeof(T).ToString()].MessageReceived -= _TelefranzConsumers<T>.wrappings[theAction];
|
||||
_TelefranzConsumers<T>.wrappings.Remove(theAction);
|
||||
topicSubscribers[dummy.topic]--;
|
||||
if(topicSubscribers[dummy.topic] == 0)
|
||||
topicSubscribers[typeof(T).ToString()]--;
|
||||
if(topicSubscribers[typeof(T).ToString()] == 0)
|
||||
{
|
||||
topicConsumers[dummy.topic].StopConsume();
|
||||
topicConsumers[typeof(T).ToString()].StopConsume();
|
||||
}
|
||||
}
|
||||
|
||||
public void ProduceMessage<T>(T message) where T : silver_messages.message
|
||||
{
|
||||
Console.WriteLine($"producing message {message}");
|
||||
clusterClient.Produce(message.topic, message.ToString());
|
||||
clusterClient.Produce(typeof(T).ToString(), message.ToString());
|
||||
}
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ using silver_messages;
|
||||
|
||||
namespace silver_messages.directorial
|
||||
{
|
||||
public class check_complete : message_directorial
|
||||
public class check_complete : silver_messages.message
|
||||
{
|
||||
public string check { get; set; }
|
||||
public string result { get; set; }
|
||||
|
@ -4,7 +4,7 @@ using silver_messages;
|
||||
|
||||
namespace silver_messages.directorial
|
||||
{
|
||||
public class command_completed : message_directorial
|
||||
public class command_completed : silver_messages.message
|
||||
{
|
||||
//name of the command that was called
|
||||
public string command { get; set; }
|
||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using silver_messages;
|
||||
namespace silver_messages.directorial
|
||||
{
|
||||
public class command_error : message_directorial
|
||||
public class command_error : silver_messages.message
|
||||
{
|
||||
//name of the command that was called
|
||||
public string command { get; set; }
|
||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using silver_messages;
|
||||
namespace silver_messages.directorial
|
||||
{
|
||||
public class command_expired : message_directorial
|
||||
public class command_expired : silver_messages.message
|
||||
{
|
||||
//name of the command that was called
|
||||
public string command { get; set; }
|
||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using silver_messages;
|
||||
namespace silver_messages.directorial
|
||||
{
|
||||
public class command_output : message_directorial
|
||||
public class command_output : silver_messages.message
|
||||
{
|
||||
//name of the command that was called
|
||||
public string command { get; set; }
|
||||
|
@ -7,7 +7,7 @@ namespace silver_messages.directorial
|
||||
/*
|
||||
* run it and send a check_complete
|
||||
*/
|
||||
public class execute_check : message_directorial
|
||||
public class execute_check : silver_messages.message
|
||||
{
|
||||
public string check { get; set; }
|
||||
public List<string> args { get; set; } = new List<string>();
|
||||
|
@ -12,7 +12,7 @@ namespace silver_messages.directorial
|
||||
* command_error as you get them, and if it ends some other way, send command_completed
|
||||
* with empty stdout and stderr.
|
||||
*/
|
||||
public class execute_command : message_directorial
|
||||
public class execute_command : silver_messages.message
|
||||
{
|
||||
public string command { get; set; }
|
||||
public List<string> args { get; set; } = new List<string>();
|
||||
|
@ -1,7 +0,0 @@
|
||||
namespace silver_messages
|
||||
{
|
||||
public abstract class message_directorial : silver_messages.message
|
||||
{
|
||||
public override string topic => "silver_messages_directorial";
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
namespace silver_messages
|
||||
{
|
||||
public class message_global : silver_messages.message
|
||||
{
|
||||
public override string topic => "silver_messages_global";
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
namespace silver_messages.global
|
||||
{
|
||||
public class report : message_global
|
||||
public class report : silver_messages.message
|
||||
{
|
||||
//your name
|
||||
public string name { get; set; }
|
||||
|
@ -4,7 +4,7 @@ using silver_messages;
|
||||
|
||||
namespace silver_messages.global
|
||||
{
|
||||
public class restart : message_global
|
||||
public class restart : silver_messages.message
|
||||
{
|
||||
//check if this is you (i.e., your handling group). If so, restart. Yourself, not the hardware.
|
||||
public string name { get; set; }
|
||||
|
@ -5,6 +5,6 @@ using silver_messages;
|
||||
namespace silver_messages.global
|
||||
{
|
||||
//if you receive this, respond with a report
|
||||
public class sound_off : message_global { }
|
||||
public class sound_off : silver_messages.message { }
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ using silver_messages;
|
||||
|
||||
namespace silver_messages.global
|
||||
{
|
||||
public class stop : message_global
|
||||
public class stop : silver_messages.message
|
||||
{
|
||||
//check if this is you (i.e., your handling group). If so, stop. Yourself, not the hardware.
|
||||
public string name { get; set; }
|
||||
|
@ -9,10 +9,7 @@ namespace silver_messages
|
||||
public abstract class message : IMemorySerializable
|
||||
{
|
||||
public string type { get { return this.GetType().ToString(); } }
|
||||
public abstract string topic { get; }
|
||||
|
||||
|
||||
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return JsonConvert.SerializeObject(this);
|
||||
|
@ -1,7 +0,0 @@
|
||||
namespace silver_messages
|
||||
{
|
||||
public abstract class message_yt : silver_messages.message
|
||||
{
|
||||
public override string topic => "silver_messages_youtube";
|
||||
}
|
||||
}
|
@ -8,7 +8,7 @@ namespace silver_messages.youtube
|
||||
* for all the scheduled, not-yet released videos, what required metadata
|
||||
* do they need
|
||||
*/
|
||||
public class metadata_needed : message_yt
|
||||
public class metadata_needed : silver_messages.message
|
||||
{
|
||||
//key is a yt id
|
||||
public Dictionary<string, yt_metadata> needed{get;set;} = new Dictionary<string, yt_metadata>();
|
||||
|
@ -8,5 +8,5 @@ namespace silver_messages.youtube
|
||||
* check all the scheduled, not-yet released videos for required metadata.
|
||||
* respond with a metadata_needed - empty if none.
|
||||
*/
|
||||
public class request_metadata_needed : message_yt { }
|
||||
public class request_metadata_needed : silver_messages.message { }
|
||||
}
|
@ -7,7 +7,7 @@ namespace silver_messages.youtube
|
||||
/*
|
||||
* someone will send as much metadata as they have - set non-null fields to the provided values
|
||||
*/
|
||||
public class update_metadata : message_yt
|
||||
public class update_metadata : silver_messages.message
|
||||
{
|
||||
public string yt_id { get; set; }
|
||||
public yt_metadata metadata { get; set; }
|
||||
|
@ -7,7 +7,7 @@ namespace silver_messages.youtube
|
||||
/** if you receive this, start the upload (of filename with metadata)
|
||||
* and then respond with an upload_started
|
||||
*/
|
||||
public class upload : message_yt
|
||||
public class upload : silver_messages.message
|
||||
{
|
||||
public string filename { get; set; }
|
||||
public yt_metadata metadata { get; set; }
|
||||
|
@ -4,7 +4,7 @@ using System.IO;
|
||||
using silver_messages;
|
||||
namespace silver_messages.youtube
|
||||
{
|
||||
public class upload_started : message_yt
|
||||
public class upload_started : silver_messages.message
|
||||
{
|
||||
public string filename { get; set; }
|
||||
public string yt_id { get; set; }
|
||||
|
Loading…
Reference in New Issue
Block a user