Inheritance: ShootBlues.ManagedScript, IMessageGateway
Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 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);
     }
 }
Ejemplo n.º 6
0
        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;
 }
Ejemplo n.º 8
0
        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
            ));
        }
Ejemplo n.º 9
0
 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);
     }
 }
Ejemplo n.º 10
0
 public JabberGatewayConfig(JabberGateway script)
     : base(Program.Scheduler)
 {
     InitializeComponent();
     Script = script;
 }