Esempio n. 1
0
 private void Skype_ApplicationStreams(SKYPE4COMLib.Application application, ApplicationStreamCollection applicationstreamcollection)
 {
     this.Logger.Debug(System.Reflection.MethodBase.GetCurrentMethod().Name);
 }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        /// <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("--");
        }
Esempio n. 4
0
        // 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);
            }
        }