private void Skype_ApplicationStreams(SKYPE4COMLib.Application application, ApplicationStreamCollection applicationstreamcollection) { this.Logger.Debug(System.Reflection.MethodBase.GetCurrentMethod().Name); }
/// <summary> /// Handles the Skype API ApplicationReceiving event. /// </summary> private void ApplicationReceiving(SKYPE4COMLib.Application pApp, ApplicationStreamCollection pStreams) { // TODO: move GUI code out of here if (pStreams.Count == 0) return; if (pStreams[1].DataLength == 0) return; string text = pStreams[1].Read(); // Decode message try { byte[] both = Convert.FromBase64String(text); int connectionId = BitConverter.ToInt32(both, 0); object message = NetUtils.Deserialize(both, 4, both.Length-4); string partner = pStreams[1].PartnerHandle; if (connectionId == ApplicationConnectionId) { // Received a sharing invitation: // the user might now either accept or reject the invitation // and we'll have to notify the host about his choice. if (message is SharingInvitationMessage) { SharingInvitationMessage sharingInvitation = (SharingInvitationMessage)message; text = string.Format("You received an invitation from {0} via Skype to share document {1}. Would you like to accept?", partner, sharingInvitation.DocumentName); var result = MessageBox.Show(text, "Invitation", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { SkypeConnection connection = Connect(partner, 1000); connection.OutgoingChannel = sharingInvitation.Channel; OnJoinSession(new JoinSessionEventArgs(connection)); Send(partner, 0, new AcceptSharingInvitationMessage(sharingInvitation.InvitationId, connection.IncomingChannel)); } else { Send(partner, 0, new DeclineSharingInvitationMessage(sharingInvitation.InvitationId)); } } // Another user has accepted a sharing invitation else if (message is AcceptSharingInvitationMessage) { AcceptSharingInvitationMessage accept = (AcceptSharingInvitationMessage)message; if (!invitations.ContainsKey(accept.InvitationId)) { Logger.Error(string.Format("Received {0} but no such invitation was sent.", message)); return; } SharingInvitationMessage sharingInvitation = invitations[accept.InvitationId]; if (sharingInvitation.InvitedUser != partner) { Logger.Error(string.Format("{0} accepted {1} intended for {2}", partner, sharingInvitation, sharingInvitation.InvitedUser)); return; } SkypeConnection connection = invitationChannels[accept.InvitationId]; ISynchronizationSession session = invitationSessions[accept.InvitationId]; invitations.Remove(accept.InvitationId); invitationChannels.Remove(accept.InvitationId); invitationSessions.Remove(accept.InvitationId); // Start the session! connection.OutgoingChannel = accept.Channel; OnHostSession(new HostSessionEventArgs(session, connection)); } // Another user has rejected a sharing invitation else if (message is DeclineSharingInvitationMessage) { DeclineSharingInvitationMessage decline = (DeclineSharingInvitationMessage)message; if (!invitations.ContainsKey(decline.InvitationId)) { Logger.Error(string.Format("Received {0} but no such invitation was sent.", message)); return; } SharingInvitationMessage sharingInvitation = invitations[decline.InvitationId]; if (sharingInvitation.InvitedUser != partner) { Logger.Error(string.Format("{0} rejected {1} intended for {2}", partner, sharingInvitation, sharingInvitation.InvitedUser)); } invitations.Remove(decline.InvitationId); invitationChannels.Remove(decline.InvitationId); invitationSessions.Remove(decline.InvitationId); MessageBox.Show("Invitation was rejected"); } } else { connections[pStreams[1].PartnerHandle][connectionId].ReceiveMessage(new ReceivedEventArgs(message)); } } catch(Exception e) { Console.Error.WriteLine("Receive error: {0}", e); Logger.Error("Received ill-formed skype datagram", e); } }
/// <summary> /// Handles the Skype API ApplicationStreams event /// </summary> private void ApplicationStreams(SKYPE4COMLib.Application pApp, ApplicationStreamCollection pStreams) { if (pApp.Name != Application.Name) return; foreach(ApplicationStream stream in pStreams) { Console.WriteLine(stream.PartnerHandle + "::" + stream.Handle); if (streams.ContainsKey(stream.PartnerHandle)) { Logger.Info(string.Format("New connection to {0} replaces old one.", pStreams[1].PartnerHandle)); } else { connections[stream.PartnerHandle] = new Dictionary<int, SkypeConnection>(); } streams[stream.PartnerHandle] = stream; } Console.WriteLine(); Console.WriteLine("--"); }
// This syntax can be used to remove ambiguity which would occur if we used just Application // vs SKYPE4COMLib.Application. public void OurApplicationStreams(SKYPE4COMLib.Application application, ApplicationStreamCollection applicationstreamcollection) { // Always use try/catch with ANY Skype calls. try { // Write Applcation Streams to Window. AddTextToTextBox1(DateTime.Now.ToLocalTime() + ": " + "Application Streams: " + application.Name + " - Application Stream Collection Count: " + applicationstreamcollection.Count + "\r\n"); } catch (Exception e) { // Possibly old Skype4COM version, log an error, drop into debug if wanted. AddTextToTextBox1(DateTime.Now.ToLocalTime() + ": " + "Application Streams Event Fired - Bad Text " + " - Exception Source: " + e.Source + " - Exception Message: " + e.Message + "\r\n"); // If the "Use Auto Debug" check box is checked and we are in debug, drop into debug here when retry, otherwise, prompt for action. Debug.Assert(!this.UseAutoDebug.Checked); } }