Example #1
0
File: bind.go Project: kpmy/xippo
func (b *Bind) Act() func(s stream.Stream) error {
	return func(s stream.Stream) (err error) {
		bind := &entity.Bind{}
		*bind = entity.BindPrototype
		bind.Resource = b.Rsrc
		iq := entity.IQ(entity.SET, bind)
		if err = s.Write(entity.ProduceStatic(iq)); err == nil {
			s.Ring(func(b *bytes.Buffer) (done bool) {
				var _e entity.Entity
				if _e, err = entity.ConsumeStatic(b); err == nil {
					switch e := _e.(type) {
					case *entity.Iq:
						switch {
						case e.Id == iq.Id && e.Type == entity.RESULT:
							stream.Bind(s, e.Inner.(*entity.Bind).Jid)
							done = true
						}
					default:
						log.Println(reflect.TypeOf(e))
					}
				}
				return
			}, 0)
		}
		return
	}
}
Example #2
0
func (exc *Executor) SendMessageToBot(msg *Message) {
	m := entity.MSG(entity.GROUPCHAT)
	m.To = "*****@*****.**"
	m.Body = msg.IncomingEvent.Data["body"]
	err := exc.xmppStream.Write(entity.ProduceStatic(m))
	if err != nil {
		exc.logger.Printf("failed to write message to xmpp stream: %v", err)
	}
}
Example #3
0
func PresenceTo(jid string, show entity.PresenceShow, status string) func(stream.Stream) error {
	return func(s stream.Stream) error {
		pr := &entity.Presence{}
		*pr = entity.PresencePrototype
		pr.To = jid
		pr.Show = show
		pr.Status = status
		return s.Write(entity.ProduceStatic(pr))
	}
}
Example #4
0
func (e *Executor) sendingRoutine() {
	for msg := range e.outgoingMsgs {
		m := entity.MSG(entity.GROUPCHAT)
		m.To = "*****@*****.**"
		m.Body = msg
		err := e.xmppStream.Write(entity.ProduceStatic(m))
		if err != nil {
			fmt.Printf("send error: %s", err)
		}
		time.Sleep(sleepDuration)
	}
}
Example #5
0
func (e *Executor) execute() {
	for script := range e.incomingScripts {
		e.stateMutex.Lock()
		err := lua.DoString(e.state, script)
		if err != nil {
			fmt.Printf("lua f*****g shit error: %s\n", err)
			m := entity.MSG(entity.GROUPCHAT)
			m.To = "*****@*****.**"
			m.Body = err.Error()
			e.xmppStream.Write(entity.ProduceStatic(m))
		}
		e.stateMutex.Unlock()
	}
}
Example #6
0
func (e *Executor) processIncomingEvents() {
	for evt := range e.incomingEvents {
		e.stateMutex.Lock()
		obj, _ := e.vm.Object("({})")
		for key, value := range evt.Data {
			obj.Set(key, value)
		}
		for _, handler := range e.eventHandlers[evt.Type] {
			_, err := handler.Call(obj.Value(), obj.Value())
			if err != nil {
				fmt.Printf("js f*****g shit error: %s\n", err)
				m := entity.MSG(entity.GROUPCHAT)
				m.To = "*****@*****.**"
				m.Body = err.Error()
				e.xmppStream.Write(entity.ProduceStatic(m))
			}
		}
		e.stateMutex.Unlock()
	}
}
Example #7
0
File: bind.go Project: kpmy/xippo
func Session(s stream.Stream) (err error) {
	iq := entity.IQ(entity.SET, &entity.SessionPrototype)
	if err = s.Write(entity.ProduceStatic(iq)); err == nil {
		s.Ring(func(b *bytes.Buffer) (done bool) {
			var _e entity.Entity
			if _e, err = entity.ConsumeStatic(b); err == nil {
				switch e := _e.(type) {
				case *entity.Iq:
					switch {
					case e.Id == iq.Id && e.Type == entity.RESULT:
						done = true
					}
				default:
					log.Println(reflect.TypeOf(e))
				}
			}
			return
		}, 0)
	}
	return
}
Example #8
0
func (e *Executor) processIncomingEvents() {
	for evt := range e.incomingEvents {
		e.stateMutex.Lock()
		// get events table
		e.state.PushString(callbacksLocation)
		e.state.Table(lua.RegistryIndex)
		// get callbacks table for the specific event
		e.state.PushString(evt.Type)
		e.state.Table(-2)
		// loop over callbacks
		if !e.state.IsNil(-1) {
			e.state.PushNil()
			for e.state.Next(-2) {
				if e.state.IsFunction(-1) {
					// create the table which will be passed to the handler
					e.state.NewTable()
					// loop over the event data, populating the table
					for k, v := range evt.Data {
						e.state.PushString(k)
						e.state.PushString(v)
						e.state.SetTable(-3)
					}
					err := e.state.ProtectedCall(1, 0, 0)
					if err != nil {
						m := entity.MSG(entity.GROUPCHAT)
						m.To = "*****@*****.**"
						m.Body, _ = e.state.ToString(-1)
						e.xmppStream.Write(entity.ProduceStatic(m))
						e.state.Pop(1)
					}
				} else {
					e.state.Pop(1)
				}
			}
		}
		// pop callbacks table or nil value
		e.state.Pop(1)
		e.stateMutex.Unlock()
	}
}
Example #9
0
File: auth.go Project: kpmy/xippo
func (p *PlainAuth) Act() func(stream.Stream) error {
	return func(s stream.Stream) (err error) {
		auth := &entity.PlainAuth{}
		*auth = entity.PlainAuthPrototype
		auth.Init(p.Client.Name, p.Pwd)
		if err = s.Write(entity.ProduceStatic(auth)); err == nil {
			s.Ring(func(b *bytes.Buffer) (done bool) {
				var _e entity.Entity
				if _e, err = entity.ConsumeStatic(b); err == nil {
					switch e := _e.(type) {
					case *entity.Success:
						done = true
					default:
						log.Println(reflect.TypeOf(e))
					}
				}
				return
			}, 0)
		}
		return
	}
}
Example #10
0
func InitialPresence(s stream.Stream) (err error) {
	err = s.Write(entity.ProduceStatic(&entity.PresencePrototype))
	return
}