private void ChannelEvent_onString(TEventEntry aEventEntry, string aString) { if (aEventEntry.Tag != null) { (aEventEntry.Tag as IMessageToClient).SendMessageToClient(CreateMessage(aString)); } }
private void ChannelEvent_onStreamEnd(TEventEntry aEventEntry, string aName, Stream stream, bool aCancel) { if (aEventEntry.Tag != null) { (aEventEntry.Tag as IMessageToClient).SendMessageToClient(CreateMessage((stream as MemoryStream).ToArray())); } }
public static void HookupRoot() { if (rootEvent == null) { rootEvent = connection.subscribe(RootEventName, false); rootEvent.onIntString += RootEvent_onIntString; } }
private static void RootEvent_onIntString(TEventEntry aEventEntry, int aInt, string aString) { try { if (aInt == TEventEntry.actionInquire) { var returnEvent = aString != "" ? connection.publish(aString, false) : aEventEntry; Debug.WriteLine(DateTime.Now + ": received inquire on root " + aEventEntry.eventName + " (" + aString + "), return on " + returnEvent.eventName); try { foreach (var ctep in channelToEvent) { string channelEventNamePostfix; try { var clientType = Lookups.channelToClientType[ctep.Key]; channelEventNamePostfix = (clientType != null) && (clientType.Length > 0) ? "&" + clientType : ""; } catch { channelEventNamePostfix = ""; } returnEvent.signalIntString(TEventEntry.actionNew, ctep.Value.eventName + channelEventNamePostfix); // answer inquire on root with all event names of channels ie clients } } finally { if (returnEvent != aEventEntry) { returnEvent.unPublish(); } } } else if (aInt == actionStatus) { // build status to return var status = "{\"id\":\"" + connection.modelName + " @ " + host.BaseAddresses[0].AbsoluteUri + "\",\"status\":\"" + host.State.ToString() + "\",\"info\":\"" + channelToEvent.Count.ToString() + " channels\"}"; // signal status var returnEvent = aString != "" ? connection.publish(aString, false) : aEventEntry; Debug.WriteLine(DateTime.Now + ": received status request on root " + aEventEntry.eventName + " (" + aString + "), return on " + returnEvent.eventName); try { returnEvent.signalString(status); } finally { if (returnEvent != aEventEntry) { returnEvent.unPublish(); } } } } catch (Exception e) { Debug.WriteLine(DateTime.Now + ": ## Exception in RootEvent_onIntString (" + aInt.ToString() + ", " + aString + "): " + e.Message); } }
private void ChannelEvent_onIntString(TEventEntry aEventEntry, int aInt, string aString) { if (aInt == TEventEntry.actionDelete) { // handle disconnect of session server side.. // NOT: just unpublish to free up event, but keep on listening because web part is still up // NOT: aEventEntry.unPublish(); // signal web client session server is disconnected if (aEventEntry.Tag != null) { (aEventEntry.Tag as IMessageToClient).SendMessageToClient(CreateMessage("{\"type\":\"connection\",\"payload\":{\"message\":\"session server has disconnected\"}}")); } } }
public static void SessionEvent_onIntString(TEventEntry aEventEntry, int aInt, string aString) { if (aInt == TEventEntry.actionInquire) { // return all clients on session var returnEvent = aString != "" ? aEventEntry.connection.publish(aString, false) : aEventEntry; Debug.WriteLine(DateTime.Now + ": received inquire on " + aEventEntry.eventName + " (" + aString + "), return on " + returnEvent.eventName); try { var eventNameFilter = aEventEntry.eventName + "."; foreach (var ctep in Lookups.channelToEvent) { // check if channel belongs to session if (ctep.Value.eventName.StartsWith(eventNameFilter)) { string channelEventNamePostfix; try { var clientType = Lookups.channelToClientType[ctep.Key]; channelEventNamePostfix = (clientType != null) && (clientType.Length > 0) ? "&" + clientType : ""; } catch { channelEventNamePostfix = ""; } returnEvent.signalIntString(TEventEntry.actionNew, ctep.Value.eventName + channelEventNamePostfix); // event names of clients on session } } } finally { if (returnEvent != aEventEntry) { returnEvent.unPublish(); } } } }
static void Main(string[] args) { TConnection connection = new TTLSConnection("client-eco-district.pfx", "&8dh48klosaxu90OKH", "root-ca-imb.crt", true, "C# test model"); try { Console.WriteLine("connected"); Console.WriteLine("private event name: " + connection.privateEventName); Console.WriteLine("monitor event name: " + connection.monitorEventName); // connect an event handler for a disconnect connection.onDisconnect += (aConnection) => { Console.WriteLine("disconnected.."); }; // connect an event handler for an exception in processing events and commands connection.onException += (aConnection, aException) => { Console.WriteLine("## Exception: " + aException.Message); }; // subscribe to an event TEventEntry eventEntry = connection.subscribe("test event"); // add an event handler for string events eventEntry.onString += (aEventEntry, aString) => { if (aString.CompareTo("string command") == 0) { Console.WriteLine("OK received string " + aEventEntry.eventName + " " + aString); } else { Console.WriteLine("## received string " + aEventEntry.eventName + " " + aString); } }; // add an event handler for stream create events eventEntry.onStreamCreate += (aEventEntry, aStreamName) => { if (aStreamName == "a stream name") { Console.WriteLine("OK received stream create " + aEventEntry.eventName + " " + aStreamName); } else { Console.WriteLine("## received stream create " + aEventEntry.eventName + " " + aStreamName); } return(File.Create("out.cscharp.dmp")); }; // add an event handler for stream end events eventEntry.onStreamEnd += (aEventEntry, aStreamName, aStream, aCancel) => { if (aStreamName == "a stream name" && !aCancel) { Console.WriteLine("OK received stream end " + aEventEntry.eventName + " " + aStreamName + " " + aCancel.ToString()); } else { Console.WriteLine("## received stream end " + aEventEntry.eventName + " " + aStreamName + " " + aCancel.ToString()); } }; showHelp(); ConsoleKeyInfo key; do { key = Console.ReadKey(); switch (key.KeyChar) { case 's': case 'S': // send a basic string event eventEntry.signalString(": string command"); // send a stream FileStream stream = File.OpenRead("test.jpg"); // todo: use path of existing file try { eventEntry.signalStream("a stream name", stream); } finally { stream.Close(); } Console.WriteLine(": sent events.."); break; case 'h': connection.setHeartBeat(1000); // enable heartbeat every second Console.WriteLine(": heartbeat enabled.."); break; case 'H': connection.setHeartBeat(0); // disable heartbeat (<=0) Console.WriteLine(": heartbeat disabled.."); break; case '?': showHelp(); break; } }while (key.KeyChar != 'q' && key.KeyChar != 'Q' && key.KeyChar != (char)27); } finally { connection.close(); } }
private Stream ChannelEvent_onStreamCreate(TEventEntry aEventEntry, string aName) { return(new MemoryStream()); }