UCC API – Unified Communications Client API – Parte 5 – Instant Messaging Session

Visão Geral

Nesta parte veremos como estabelecer uma sessão de instant messaging entre dois usuários na UCC API.

Uma informação importante sobre esse tipo de sessão é que ela tem apenas UM participante. É por isso que conferências são um pouco mais complicadas do que sessão “single-user”.

Eu vou falar nessa parte apenas de sessões para um único usuário.

Outra particularidade é que existem tratamentos diferentes para sessões originárias do usuário conectado (outgoing sessions) e sessões iniciadas por outros usuários (incoming session).

Outgoing Sessions

Iniciar uma sessão é simples:


    public void CreateIMSession(IUccEndpoint endpoint, string user)
    {
      IUccSessionManager sessionManager = (IUccSessionManager)endpoint;

      UccUriManager uriManager = new UccUriManager();      
      UccUri destUser = uriManager.ParseUri(user);

      IUccSession session = sessionManager.CreateSession(UCC_SESSION_TYPE.UCCST_INSTANT_MESSAGING, null);
      IUccSessionParticipant participant = session.CreateParticipant(destUser, null);
      ComHelper.Advise<_IUccInstantMessagingSessionParticipantEvents>(participant, this);     
      session.AddParticipant(participant);

      imSession = (IUccInstantMessagingSession)session;
      ComHelper.Advise<_IUccInstantMessagingSessionEvents>(imSession, this);     
    }

Esta função recebe um endpoint habilitado e o usuário que deseja convidar para a sessão. O formato esperado é “sip:user@domain.com”. Praticamente todo lugar que espera por uma Uri utiliza este formato na UCC API.

Na primeira linha, fazemos um cast do endpoin para IUccSessionManager. O session manager é o mecanismo para iniciar qualquer tipo de sessão na UCC API. O tipo de sessão é especificado no primeiro parâmetro do método CreateSession.

O próximo passo é instanciar um participante. É aqui que colocamos a Uri do usuário remoto. Então fazemos um advise na interface _IUccInstantMessagingSessionParticipantEvents no participante criado.

O último passo é fazer um advise da interface _IUccInstantMessagingSessionEvents no objeto imSession. O objeto imSession object é um objeto do tipo IUccInstantMessagingSession. Nós precisamos guardar uma referência para ele para podermos enviar mensagens.

A interface _IUccInstantMessagingSessionParticipantEvents tem métodos importantes como OnComposing e OnIdle, usados para podermos criar features do tipo “o usuário está digitando” numa aplicação de instant messaging. O OnInstantMessageReceived é o evento mais importante. Esse método será chamado toda vez que o participante remoto manda uma mensagem.

    public void OnInstantMessageReceived(UccInstantMessagingSessionParticipant pEventSource, UccIncomingInstantMessageEvent pEventData)
    {
      MessageBox.Show(pEventData.Content);
    }

É importante tratarmos o content-type da mensagem.

Para mandar uma mensagem, usamos o método SendMessage da IUccInstantMessagingSession.

    public void SendMessage(string msg)
    {
      imSession.SendMessage("text/plain", msg);
    }

Incoming Sessions

Toda vez que uma incoming session é iniciada, o método IUccEndpoint.OnIncomingSession é chamado (se o endpoint corretamente ouve os eventos de _IUccEndpointEvents).

Neste evento, é necessário tratarmos a sessão da seguinte forma:


    public void OnIncomingSession(IUccEndpoint pEventSource, UccIncomingSessionEvent pEventData)
    {
      if (pEventData.Session.Type == UCC_SESSION_TYPE.UCCST_INSTANT_MESSAGING)
      {
        pEventData.Accept();
        imSession = (IUccInstantMessagingSession)pEventData.Session;

        IUccSessionParticipant participant = (IUccSessionParticipant) pEventData.Inviter;
        ComHelper.Advise(participant, this);     
      }
    }

A idéia é muito parecida com uma outgoing session. A diferença é que recebemos o objeto IUccInstantMessageSession e o IUccInstantMessagingSessionParticipant do parâmetro pEventData.

Devemos manter a referência do objeto imSession para enviarmos mensagens através do método SendMessage.

Ouvindo os eventos de IUccInstantMessagingSessionParticipantEvents, teremos acesso ao evento OnInstantMessageReceived.

Desta forma, podemos estabelecer o canal de comunicação para incoming sessions.

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s