public static Future<Endpoint> Connect(JabberGateway gateway, EndpointSettings settings, Action<float> setStatus) { var f = new Future<Endpoint>(); Program.Scheduler.Start( f, new SchedulableGeneratorThunk(DoConnect(gateway, settings, setStatus)), TaskExecutionPolicy.RunWhileFutureLives ); return f; }
public static Future <Endpoint> Connect(JabberGateway gateway, EndpointSettings settings, Action <float> setStatus) { var f = new Future <Endpoint>(); Program.Scheduler.Start( f, new SchedulableGeneratorThunk(DoConnect(gateway, settings, setStatus)), TaskExecutionPolicy.RunWhileFutureLives ); return(f); }
protected Endpoint(JabberGateway gateway, EndpointSettings settings, Session session) { Gateway = gateway; Settings = settings; Session = session; Queue = Gateway.GetQueue(settings.Name); Endpoint oldEndpoint = null; if (gateway.Endpoints.TryGetValue(settings.Name, out oldEndpoint) && (oldEndpoint != null)) oldEndpoint.Dispose(); gateway.Endpoints[settings.Name] = this; QueueTaskFuture = Program.Scheduler.Start(QueueTask(), TaskExecutionPolicy.RunAsBackgroundTask); }
protected Endpoint(JabberGateway gateway, EndpointSettings settings, Session session) { Gateway = gateway; Settings = settings; Session = session; Queue = Gateway.GetQueue(settings.Name); Endpoint oldEndpoint = null; if (gateway.Endpoints.TryGetValue(settings.Name, out oldEndpoint) && (oldEndpoint != null)) { oldEndpoint.Dispose(); } gateway.Endpoints[settings.Name] = this; QueueTaskFuture = Program.Scheduler.Start(QueueTask(), TaskExecutionPolicy.RunAsBackgroundTask); }
protected static void HandleIncomingMessage(JabberGateway gateway, string endpointName, JabberID from, string body) { try { var si = Program.GetScriptInstance <Common>("Common.Script.dll"); if (si != null) { var mdata = new ShootBlues.Script.Common.MessageData( null, new Dictionary <string, object> { { "__name__", "JabberMessage" }, { "endpoint", endpointName }, { "from", from.FullJabberID }, { "text", body } } ); si.OnNewMessage(gateway, mdata); } } catch (Exception ex) { Program.Scheduler.OnTaskError(ex); } }
protected static IEnumerator <object> DoConnect(JabberGateway gateway, EndpointSettings settings, Action <float> setStatus) { Session session = null; var options = new ConnectionOptions(settings.Server); yield return(Jabber.AsyncLogin( settings.Username, settings.Password, settings.Resource, false, options ).Bind(() => session)); setStatus(0.5f); // F*****g soapbox doesn't handle pings or let you handle them with strongly typed packets, wee session.OnXMLReceived += (xml, socketID) => { if (xml.Contains("<ping xmlns=\"urn:xmpp:ping\"")) { Program.Scheduler.Start(HandlePing(session, xml, socketID), TaskExecutionPolicy.RunAsBackgroundTask); } }; var messagePrefix = settings.ChatAlias.ToLowerInvariant() + ":"; session.AddHandler(typeof(SoapboxCore.Message.ChatMessagePacket), (p) => { var cm = (SoapboxCore.Message.ChatMessagePacket)p; string bodyText = null; try { bodyText = cm.Body; } catch { } if (bodyText != null) { HandleIncomingMessage(gateway, settings.Name, cm.From, bodyText); } }); session.AddHandler(typeof(MUC.Message.GroupChatMessage), (p) => { var gcm = (MUC.Message.GroupChatMessage)p; string bodyText = null; try { bodyText = gcm.Body; } catch { } if ((bodyText != null) && (bodyText.ToLowerInvariant().Trim().StartsWith(messagePrefix))) { bodyText = bodyText.Substring(bodyText.IndexOf(':') + 1); HandleIncomingMessage(gateway, settings.Name, gcm.From, bodyText); } }); session.OnAsynchronousException += (e) => { Program.Scheduler.OnTaskError(e); }; var roomJid = settings.GetRoomJid(true); if (roomJid != null) { yield return(session.AsyncSend(new MUC.Presence.JoinRoomRequest(roomJid))); } setStatus(1.0f); yield return(new Result(new Endpoint( gateway, settings, session ))); }
public JabberGatewayConfig(JabberGateway script) : base(Program.Scheduler) { InitializeComponent(); Script = script; }
protected static IEnumerator<object> DoConnect(JabberGateway gateway, EndpointSettings settings, Action<float> setStatus) { Session session = null; var options = new ConnectionOptions(settings.Server); yield return Jabber.AsyncLogin( settings.Username, settings.Password, settings.Resource, false, options ).Bind(() => session); setStatus(0.5f); // F*****g soapbox doesn't handle pings or let you handle them with strongly typed packets, wee session.OnXMLReceived += (xml, socketID) => { if (xml.Contains("<ping xmlns=\"urn:xmpp:ping\"")) Program.Scheduler.Start(HandlePing(session, xml, socketID), TaskExecutionPolicy.RunAsBackgroundTask); }; var messagePrefix = settings.ChatAlias.ToLowerInvariant() + ":"; session.AddHandler(typeof(SoapboxCore.Message.ChatMessagePacket), (p) => { var cm = (SoapboxCore.Message.ChatMessagePacket)p; string bodyText = null; try { bodyText = cm.Body; } catch { } if (bodyText != null) HandleIncomingMessage(gateway, settings.Name, cm.From, bodyText); }); session.AddHandler(typeof(MUC.Message.GroupChatMessage), (p) => { var gcm = (MUC.Message.GroupChatMessage)p; string bodyText = null; try { bodyText = gcm.Body; } catch { } if ((bodyText != null) && (bodyText.ToLowerInvariant().Trim().StartsWith(messagePrefix))) { bodyText = bodyText.Substring(bodyText.IndexOf(':') + 1); HandleIncomingMessage(gateway, settings.Name, gcm.From, bodyText); } }); session.OnAsynchronousException += (e) => { Program.Scheduler.OnTaskError(e); }; var roomJid = settings.GetRoomJid(true); if (roomJid != null) yield return session.AsyncSend(new MUC.Presence.JoinRoomRequest(roomJid)); setStatus(1.0f); yield return new Result(new Endpoint( gateway, settings, session )); }
protected static void HandleIncomingMessage(JabberGateway gateway, string endpointName, JabberID from, string body) { try { var si = Program.GetScriptInstance<Common>("Common.Script.dll"); if (si != null) { var mdata = new ShootBlues.Script.Common.MessageData( null, new Dictionary<string, object> { {"__name__", "JabberMessage"}, {"endpoint", endpointName}, {"from", from.FullJabberID}, {"text", body} } ); si.OnNewMessage(gateway, mdata); } } catch (Exception ex) { Program.Scheduler.OnTaskError(ex); } }