RTC Client V1.3 Receiving sent instant messages

Hello all,

I have trouble getting an RTC SIP client I have written to receive a message sent to it by another client. I know that the other client does send the message because I can see the message sent using "SIP SNOOP" (which is a tool available for LCS server). I am using the following code to send the message :

publicvoid DoSendIM(IRTCBuddy destBuddy,string message)

{try
{
RTCCore.IRTCSession session = client.CreateSession(

RTCCore.RTC_SESSION_TYPE.RTCST_IM,null,profile,0);

try
{

session.AddParticipan(destBuddy.PresentityURI,destBuddy.Name);

session.SendMessage("try sending:",message,0);

}

catch(COMException COMex)

{

throw(COMex);

}

}

catch(Exception ex)

{

throw(ex);

}

}


After sending the message I see "603 decline" on my SIP-SNOOP. But I do see my message sent. Why is my destination client not receiving the message ?
What is the sequence of events that should be handled by the destination client so that it can receive messages ?

I added an event handler as follows but it still doesn't help:

case
RTC_EVENT.RTCE_MESSAGING:

this.OnRTCMessagingEvent((IRTCMessagingEvent)rtcEvent);

break;

I am beginning to think that perhaps I should also handle session changed events or participant events but I am not sure how...
I would appreciate any advice you could give me...

Many thanks ,
Jon

[2656 byte] By [Student_Jon] at [2008-1-12]
# 1
Hi All,

I eventually solved the problem by myself. The problem was that the initialization had a missing line of code. The client should be initialized to listen for incoming sessions. If it isn't, another client can send messages to this client but it won't be able to receive them.
The line of initialization code in c# is :

this.client.ListenForIncomingSessions=
RTC_LISTEN_MODE.RTCLM_BOTH;

If you don't write this line the session may get a session change event of type INPROGRESS but you will immediately receive session DISCONNECTED (you can write event handlers to and see this).

If you want to print the message received you can write the event handler for the RTCE_MESSAGING event.

void OnRTCMessagingEvent(IRTCMessagingEvent messagingEvent)

{

Trace.WriteLine("The event type is: "+messagingEvent.EventType.ToString());

if(messagingEvent.EventType == RTC_MESSAGING_EVENT_TYPE.RTCMSET_MESSAGE)

Trace.WriteLine(messagingEvent.Message);

}

And also don't forget to write :
.
.
.

case RTC_EVENT.RTCE_MESSAGING:

this.OnRTCMessagingEvent((IRTCMessagingEvent)rtcEvent);
break
;

.
.
.


I hope this little bit of advice will help others...

JON

Student_Jon at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...
# 2
Hey Jon,

I m building a softphone using rtc.

I m kinda stuck at a point.

In Instant messaging, you have a 2 clients registered at 2 different servers.
The problem I m facing here is that , the session is established and remains in connected state only for the first time the two clients register and communicate.
The next time the two clients register and start a session, it gets disconnected.

Can you please help me out ?

Regards,
Nikhil Dharap

nikhil_dharap at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...
# 3

Hi,

I'm having the same problem that you had. Can u send me the code with the solution because I tried everything and I can't seem to receive IM, wich means I can't trigger ther RTCE_MESSAGING event. My mail is rafl@sapo.pt.

Kind Regards

My applications is the following:

private void button1_Click(object sender, System.EventArgs e)

{

RTC_Client = new RTCClientClass();

RTC_Client.Initialize();

RTC_Client.EventFilter =

(

0x00000100 |

0x00040000 |

0x00000001 |

0x00000080 |

0x00000010 |

0x00000400 |

0x00000002 |

0x00010000 |

0x00000008 |

0x00000004 |

0x00000200 |

0x00080000 |

0x00000800 |

0);

//portas TCP e UDP respectivamente

RTC_Client.set_AllowedPorts(0x00000002, RTCCORELib.RTC_LISTEN_MODE.RTCLM_BOTH );

//Definir o Awser mode

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_APPLICATION, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_IM, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_ACCEPT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_MULTIPARTY_IM, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_ACCEPT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_PC_TO_PC, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_PC_TO_PHONE, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_PHONE_TO_PHONE, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

displayName = "Servi?o de Notifica??es";

domain = "basebancamcgcx";

server = "gcxbbptusr301";

userAccount = "msftdev04";

userPassword = "dev04msft";

domainURI = "basebancamcgcx.pt";

buddyNamespace = "rtcService";

timeout = 6000000;

/*

?RTC_Client.LocalUserName

"msftdev16"

?RTC_Client.LocalUserURI

"sip:BBDEV_JBRAGA"

*/

RTC_Client.GetProfile(userAccount,userPassword,userAccount + "@" + domainURI,server,2,0);

//Cria??o do gestor de eventos

RTC_Client.IRTCEventNotification_Event_Event += new IRTCEventNotification_EventEventHandler(RTC_IRTCEventNotification_Event_Event);

#region bla

RTC_Session = RTC_Client.CreateSession(RTCCORELib.RTC_SESSION_TYPE.RTCST_MULTIPARTY_IM , null,null, 0);

//Adicionar um participante à sess?o

RTC_Session.AddParticipant(domainURI,userAccount);

RTC_Session.SendMessage("asasas","asasasas",0);//RL

//Cria??o do event manager

//Para criar um event manager relacionado com o componente RTC, deve implementar-se

//o interface IRTCEventNotification_Event

}

private void RTC_IRTCEventNotification_Event_Event(RTC_EVENT RTCEvent, object pEvent)

{

switch (RTCEvent)

{

case RTC_EVENT.RTCE_SESSION_STATE_CHANGE:

IRTCSessionStateChangeEvent sessionEvent = null;

sessionEvent = (IRTCSessionStateChangeEvent)pEvent;

OnIRTCSessionStateChangeEvent(sessionEvent);

Receber_Teste("RTCE_SESSION_STATE_CHANGE");

break;

case RTC_EVENT.RTCE_MESSAGING:

IRTCMessagingEvent messagingEvent = null;

messagingEvent = (IRTCMessagingEvent)pEvent;

OnIRTCMessaging(messagingEvent);

Receber_Teste("RTCE_MESSAGING");

break;

case RTC_EVENT.RTCE_BUDDY:

Receber_Teste("RTCE_BUDDY");

break;

case RTC_EVENT.RTCE_MEDIA:

Receber_Teste("RTCE_MEDIA");

IRTCMediaEvent mediaEvent = null;

mediaEvent = (IRTCMediaEvent)pEvent;

OnIRTCMediaEvent(mediaEvent);

break;

case RTC_EVENT.RTCE_CLIENT:

Receber_Teste("RTCE_CLIENT");

break;

case RTC_EVENT.RTCE_PROFILE:

IRTCProfileEvent2 profileEvent = null;

profileEvent = (IRTCProfileEvent2)pEvent;

OnRTCProfileEvent(profileEvent);

Receber_Teste("RTCE_PROFILE");

break;

case RTC_EVENT.RTCE_REGISTRATION_STATE_CHANGE:

Receber_Teste("RTCE_REGISTRATION_STATE_CHANGE");

break;

case RTC_EVENT.RTCE_GROUP:

Receber_Teste("RTCE_GROUP");

break;

case RTC_EVENT.RTCE_SESSION_OPERATION_COMPLETE:

IRTCSessionOperationCompleteEvent SessionOperationCompleteEvent = null;

SessionOperationCompleteEvent = (IRTCSessionOperationCompleteEvent)pEvent;

OnIRTCSessionOperationComplete(SessionOperationCompleteEvent);

Receber_Teste("RTCE_SESSION_OPERATION_COMPLETE");

break;

}

}

private void OnIRTCSessionStateChangeEvent(IRTCSessionStateChangeEvent sessionEvent)

{

RTC_SESSION_STATE sessionState;

sessionState = sessionEvent.State;

switch(sessionState)

{

case RTC_SESSION_STATE.RTCSS_INCOMING:

RTC_Client.PlayRing(RTC_RING_TYPE.RTCRT_PHONE,true);

RTC_Session.Answer();

break;

case RTC_SESSION_STATE.RTCSS_INPROGRESS:

RTC_Client.PlayRing(RTC_RING_TYPE.RTCRT_PHONE,true);

RTC_Session.Answer();

break;

}

}

private void OnIRTCMediaEvent(IRTCMediaEvent mediaEvent)

{

RTC_MEDIA_EVENT_TYPE mediaType;

IVideoWindow videoWindow = null;

mediaType = mediaEvent.EventType;

switch(mediaType)

{

case RTC_MEDIA_EVENT_TYPE.RTCMET_STARTED:

videoWindow = RTC_Client.get_IVideoWindow(RTC_VIDEO_DEVICE.RTCVD_RECEIVE);

videoWindow.SetWindowPosition(50,50,400,380);

videoWindow.Visible = 1;

break;

case RTC_MEDIA_EVENT_TYPE.RTCMET_STOPPED:

videoWindow = RTC_Client.get_IVideoWindow(RTC_VIDEO_DEVICE.RTCVD_RECEIVE);

videoWindow.SetWindowPosition(50,50,400,380);

videoWindow.Visible = 0;

videoWindow = null;

break;

}

}

private void OnIRTCMessaging(IRTCMessagingEvent messagingEvent)

{

switch(messagingEvent.EventType)

{

case RTC_MESSAGING_EVENT_TYPE.RTCMSET_STATUS :

switch( messagingEvent.UserStatus)

{

case RTC_MESSAGING_USER_STATUS.RTCMUS_IDLE:

break;

case RTC_MESSAGING_USER_STATUS.RTCMUS_TYPING:

break;

}

break;

case RTC_MESSAGING_EVENT_TYPE.RTCMSET_MESSAGE:

messageReceivedFromUserUri = messagingEvent.Participant.UserURI;

messageHeader = messagingEvent.MessageHeader;

message = messagingEvent.Message;

MessageBox.Show(messageReceivedFromUserUri + " : " + message );

break;

}

}

private void OnRTCProfileEvent(IRTCProfileEvent2 profileEvent)

{

switch (profileEvent.EventType)

{

case RTC_PROFILE_EVENT_TYPE.RTCPFET_PROFILE_GET:

if (profileEvent.StatusCode == 0 )

{

RTCProfile = (IRTCProfile2)profileEvent.Profile;

RTCProfile.AllowedAuth = 0x00010000 | 0x00000004 | 0x00000008;

RTC_Presence = RTC_Client;

RTC_Presence.EnablePresenceEx(RTCProfile,null,0);

RTC_Presence.OfferWatcherMode = RTC_OFFER_WATCHER_MODE.RTCOWM_OFFER_WATCHER_EVENT;

RCT_Provisioning.EnableProfileEx (RTCProfile,0x0000000F,0x0000000F);

RTC_Presence.SetLocalPresenceInfo(RTC_PRESENCE_STATUS.RTCXS_PRESENCE_OFFLINE,"Teste");

else

{

MessageBox.Show("N?o tem perfil");

}

break;

}

}

private void OnIRTCSessionOperationComplete(IRTCSessionOperationCompleteEvent sessionOpCompleteEvent)

{

System.Diagnostics.Debug.WriteLine("SessionOperationComplete");

milanac at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...
# 4

Hi,

I'm having the same problem that you had. Can u send me the code with the solution because I tried everything and I can't seem to receive IM, wich means I can't trigger ther RTCE_MESSAGING event. My mail is rafl@sapo.pt.

Kind Regards

My applications is the following:

private void button1_Click(object sender, System.EventArgs e)

{

RTC_Client = new RTCClientClass();

RTC_Client.Initialize();

RTC_Client.EventFilter =

(

0x00000100 |

0x00040000 |

0x00000001 |

0x00000080 |

0x00000010 |

0x00000400 |

0x00000002 |

0x00010000 |

0x00000008 |

0x00000004 |

0x00000200 |

0x00080000 |

0x00000800 |

0);

//portas TCP e UDP respectivamente

RTC_Client.set_AllowedPorts(0x00000002, RTCCORELib.RTC_LISTEN_MODE.RTCLM_BOTH );

//Definir o Awser mode

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_APPLICATION, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_IM, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_ACCEPT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_MULTIPARTY_IM, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_ACCEPT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_PC_TO_PC, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_PC_TO_PHONE, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

RTC_Client.set_AnswerMode( RTCCORELib.RTC_SESSION_TYPE.RTCST_PHONE_TO_PHONE, RTCCORELib.RTC_ANSWER_MODE.RTCAM_AUTOMATICALLY_REJECT );

displayName = "Servi?o de Notifica??es";

domain = "basebancamcgcx";

server = "gcxbbptusr301";

userAccount = "msftdev04";

userPassword = "dev04msft";

domainURI = "basebancamcgcx.pt";

buddyNamespace = "rtcService";

timeout = 6000000;

/*

?RTC_Client.LocalUserName

"msftdev16"

?RTC_Client.LocalUserURI

"sip:BBDEV_JBRAGA"

*/

RTC_Client.GetProfile(userAccount,userPassword,userAccount + "@" + domainURI,server,2,0);

//Cria??o do gestor de eventos

RTC_Client.IRTCEventNotification_Event_Event += new IRTCEventNotification_EventEventHandler(RTC_IRTCEventNotification_Event_Event);

#region bla

RTC_Session = RTC_Client.CreateSession(RTCCORELib.RTC_SESSION_TYPE.RTCST_MULTIPARTY_IM , null,null, 0);

//Adicionar um participante à sess?o

RTC_Session.AddParticipant(domainURI,userAccount);

RTC_Session.SendMessage("asasas","asasasas",0);//RL

//Cria??o do event manager

//Para criar um event manager relacionado com o componente RTC, deve implementar-se

//o interface IRTCEventNotification_Event

}

private void RTC_IRTCEventNotification_Event_Event(RTC_EVENT RTCEvent, object pEvent)

{

switch (RTCEvent)

{

case RTC_EVENT.RTCE_SESSION_STATE_CHANGE:

IRTCSessionStateChangeEvent sessionEvent = null;

sessionEvent = (IRTCSessionStateChangeEvent)pEvent;

OnIRTCSessionStateChangeEvent(sessionEvent);

Receber_Teste("RTCE_SESSION_STATE_CHANGE");

break;

case RTC_EVENT.RTCE_MESSAGING:

IRTCMessagingEvent messagingEvent = null;

messagingEvent = (IRTCMessagingEvent)pEvent;

OnIRTCMessaging(messagingEvent);

Receber_Teste("RTCE_MESSAGING");

break;

case RTC_EVENT.RTCE_BUDDY:

Receber_Teste("RTCE_BUDDY");

break;

case RTC_EVENT.RTCE_MEDIA:

Receber_Teste("RTCE_MEDIA");

IRTCMediaEvent mediaEvent = null;

mediaEvent = (IRTCMediaEvent)pEvent;

OnIRTCMediaEvent(mediaEvent);

break;

case RTC_EVENT.RTCE_CLIENT:

Receber_Teste("RTCE_CLIENT");

break;

case RTC_EVENT.RTCE_PROFILE:

IRTCProfileEvent2 profileEvent = null;

profileEvent = (IRTCProfileEvent2)pEvent;

OnRTCProfileEvent(profileEvent);

Receber_Teste("RTCE_PROFILE");

break;

case RTC_EVENT.RTCE_REGISTRATION_STATE_CHANGE:

Receber_Teste("RTCE_REGISTRATION_STATE_CHANGE");

break;

case RTC_EVENT.RTCE_GROUP:

Receber_Teste("RTCE_GROUP");

break;

case RTC_EVENT.RTCE_SESSION_OPERATION_COMPLETE:

IRTCSessionOperationCompleteEvent SessionOperationCompleteEvent = null;

SessionOperationCompleteEvent = (IRTCSessionOperationCompleteEvent)pEvent;

OnIRTCSessionOperationComplete(SessionOperationCompleteEvent);

Receber_Teste("RTCE_SESSION_OPERATION_COMPLETE");

break;

}

}

private void OnIRTCSessionStateChangeEvent(IRTCSessionStateChangeEvent sessionEvent)

{

RTC_SESSION_STATE sessionState;

sessionState = sessionEvent.State;

switch(sessionState)

{

case RTC_SESSION_STATE.RTCSS_INCOMING:

RTC_Client.PlayRing(RTC_RING_TYPE.RTCRT_PHONE,true);

RTC_Session.Answer();

break;

case RTC_SESSION_STATE.RTCSS_INPROGRESS:

RTC_Client.PlayRing(RTC_RING_TYPE.RTCRT_PHONE,true);

RTC_Session.Answer();

break;

}

}

private void OnIRTCMediaEvent(IRTCMediaEvent mediaEvent)

{

RTC_MEDIA_EVENT_TYPE mediaType;

IVideoWindow videoWindow = null;

mediaType = mediaEvent.EventType;

switch(mediaType)

{

case RTC_MEDIA_EVENT_TYPE.RTCMET_STARTED:

videoWindow = RTC_Client.get_IVideoWindow(RTC_VIDEO_DEVICE.RTCVD_RECEIVE);

videoWindow.SetWindowPosition(50,50,400,380);

videoWindow.Visible = 1;

break;

case RTC_MEDIA_EVENT_TYPE.RTCMET_STOPPED:

videoWindow = RTC_Client.get_IVideoWindow(RTC_VIDEO_DEVICE.RTCVD_RECEIVE);

videoWindow.SetWindowPosition(50,50,400,380);

videoWindow.Visible = 0;

videoWindow = null;

break;

}

}

private void OnIRTCMessaging(IRTCMessagingEvent messagingEvent)

{

switch(messagingEvent.EventType)

{

case RTC_MESSAGING_EVENT_TYPE.RTCMSET_STATUS :

switch( messagingEvent.UserStatus)

{

case RTC_MESSAGING_USER_STATUS.RTCMUS_IDLE:

break;

case RTC_MESSAGING_USER_STATUS.RTCMUS_TYPING:

break;

}

break;

case RTC_MESSAGING_EVENT_TYPE.RTCMSET_MESSAGE:

messageReceivedFromUserUri = messagingEvent.Participant.UserURI;

messageHeader = messagingEvent.MessageHeader;

message = messagingEvent.Message;

MessageBox.Show(messageReceivedFromUserUri + " : " + message );

break;

}

}

private void OnRTCProfileEvent(IRTCProfileEvent2 profileEvent)

{

switch (profileEvent.EventType)

{

case RTC_PROFILE_EVENT_TYPE.RTCPFET_PROFILE_GET:

if (profileEvent.StatusCode == 0 )

{

RTCProfile = (IRTCProfile2)profileEvent.Profile;

RTCProfile.AllowedAuth = 0x00010000 | 0x00000004 | 0x00000008;

RTC_Presence = RTC_Client;

RTC_Presence.EnablePresenceEx(RTCProfile,null,0);

RTC_Presence.OfferWatcherMode = RTC_OFFER_WATCHER_MODE.RTCOWM_OFFER_WATCHER_EVENT;

RCT_Provisioning.EnableProfileEx (RTCProfile,0x0000000F,0x0000000F);

RTC_Presence.SetLocalPresenceInfo(RTC_PRESENCE_STATUS.RTCXS_PRESENCE_OFFLINE,"Teste");

else

{

MessageBox.Show("N?o tem perfil");

}

break;

}

}

private void OnIRTCSessionOperationComplete(IRTCSessionOperationCompleteEvent sessionOpCompleteEvent)

{

System.Diagnostics.Debug.WriteLine("SessionOperationComplete");

milanac at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...
# 5

Hi,

I am unable to send IM and even my sip snoop is not running properly. Can you please give me the code to do this.

thanks

vmanzu_1977 at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...
# 6

Hi,

I am trying to follow the steps you have given for IM sample. I am not getting any error but the problem here is that I am not getting session status as connected and perhaps till the time its not connected, it won't even send message. Session state is Inprogress in the start and then Disconnected.

Also would like to know, that is it neccessary to register on SIP?

Below is my code:

on FormLoad

g_objRTCClient = New RTCCORELib.RTCClient

' RTCClient needs to be initialized before any other method can be called on it.Call g_objRTCClient.Initialize()

' Set the EventFilter to accept events.

g_objRTCClient.EventFilter = MY_RTC_EVENTFILTERS

' Register the outgoing interface that will receive the events.

g_objRTCClientWithEvents = g_objRTCClient

' Prepare for outgoing calls and listen for incoming sessions on both a dynamic port

' and a well-know static port.

g_objRTCClient.ListenForIncomingSessions = RTCCORELib.RTC_LISTEN_MODE.RTCLM_BOTH

on click of send button:

Dim strDestURI As String

strDestURI = Trim(TextBox2.Text)

g_objSession = g_objRTCClient.CreateSession(RTCCORELib.RTC_SESSION_TYPE.RTCST_IM, vbNullString, Nothing, 0)

'(2) Add participant to initiate call.

g_objParticipant = g_objSession.AddParticipant(strDestURI, "Any Name")

MsgBox(g_objSession.State)

g_objSession.SendMessage("HI", TextBox3.Text, 0)

and then EventHandler

Private Sub g_objRTCClientWithEvents_Event(ByVal RTCEvent As RTCCORELib.RTC_EVENT, ByVal pEvent As Object) Handles g_objRTCClientWithEvents.Event

' Call appropriate procedure to handle each type of event

Select Case RTCEvent

Case RTCCORELib.RTC_EVENT.RTCE_MESSAGING

OnRTCMessagingEvent(pEvent)

Case RTCCORELib.RTC_EVENT.RTCE_SESSION_STATE_CHANGE

Call SessionStateEvent(pEvent)

End Select

But RTC_MESSAGING Event is never called up only.

Would appreciate if you can help me urgently on this.

Thanks and Regards,

Ekta

Ekta at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...
# 7
objRTCClient = new RTCCORELib.RTCClientClass();
objRTCClient.Initialize();
// objRTCClient.InitializeEx(0x00000001); // DON'T USE THIS for initialization

objRTCClient.EventFilter = 0x01FFFFFF;

// Set the event handler to handle RTC Events

objRTCClient.ListenForIncomingSessions = RTC_LISTEN_MODE.RTCLM_BOTH;

eventHandler = new IRTCEventNotification_EventEventHandler(this.objRTCClientWithEvents_Event);
objRTCClient.IRTCEventNotification_Event_Event += eventHandler;

Happy Coding Smile

Cheers
Hassan

hamidhsn at 2007-9-9 > top of Msdn Tech,Feedback for forums and MSDN websites,Off-Topic Posts (Do Not Post Here)...