Ejemplo n.º 1
0
        /// <summary>
        /// 发起方:
        /// 成功建立Socket连接,准备发送1次确认
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void createSocketCompletedEventHandler(
            object sender, EventArgs ea)
        {
            // 取得新建的Socket(如果连接成功)
            // 此Socket应等于this.socket
            SocketAsyncEventArgs socketAsyncEA = (SocketAsyncEventArgs)ea;
            Socket createdSocket = socketAsyncEA.ConnectSocket;

            if (createdSocket != null && createdSocket == socket)  // 连接成功
            {
                // 1次确认,发送name=自己(发起方)用户名
                ProtocalHandler protocalHandler =
                    new ProtocalHandler(main.MyName);
                string protocalText = protocalHandler.Pack("init_gp_request");
                // 发送群中所有好友
                foreach (string friend in owner.friends)
                {
                    string friendBase64 =
                        protocalHandler.StringToBase64string(friend);
                    protocalText = protocalHandler.Append(
                        protocalText, "target", friendBase64);
                }
                byte[] sendbuf            = Encoding.ASCII.GetBytes(protocalText);
                SocketAsyncEventArgs saEA = new SocketAsyncEventArgs();
                saEA.Completed +=
                    new EventHandler <SocketAsyncEventArgs>(
                        createdSocketSendNamesCompletedEventHandler);
                saEA.SetBuffer(sendbuf, 0, sendbuf.Length);
                socket.SendAsync(saEA);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 发送RTF文本
 /// </summary>
 /// <param name="rtfToSend"></param>
 public void SendRtfText(string rtfToSend)
 {
     try
     {
         ProtocalHandler protocalHandler = new ProtocalHandler(main.MyName);
         string          protocalText    = protocalHandler.Pack(
             "chat_rtf", protocalHandler.StringToBase64string(rtfToSend));
         byte[] sendbuf            = Encoding.ASCII.GetBytes(protocalText);
         SocketAsyncEventArgs saEA = new SocketAsyncEventArgs();
         saEA.Completed +=
             new EventHandler <SocketAsyncEventArgs>(
                 SendCompletedDoNothing);
         saEA.SetBuffer(sendbuf, 0, sendbuf.Length);
         socket.SendAsync(saEA);
     }
     catch (Exception ex)
     {
         Trace.WriteLine("异常位置:SendRtfText");
         Trace.WriteLine(ex.Message);
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 发起方:
        /// 申请发送文件
        /// </summary>
        /// <param name="fileName">文件名(含路径)</param>
        public void RequestToSendFile(string fileName)
        {
            // 打开文件
            filePacker = new FilePacker(owner.fileName);
            maxSeq     = filePacker.GetPackNumbers();
            owner.BeginInvoke(owner.setProgressDelegate, (int)maxSeq);
            // 取得文件名,并将文件名编码以便使用
            safeFileNameBase64 = owner.GetSafeFileName(fileName);
            ProtocalHandler protocalHandler =
                new ProtocalHandler(owner.targetName);

            safeFileNameBase64 = protocalHandler.StringToBase64string(safeFileNameBase64);
            // 封装协议文本
            string protocalText = protocalHandler.Pack("file_requesttosend");

            protocalText =
                protocalHandler.Append(protocalText, "file", safeFileNameBase64);
            protocalText =
                protocalHandler.Append(protocalText, "maxseq", maxSeq.ToString());
            try
            {
                // 发送
                byte[] sendbuf            = Encoding.ASCII.GetBytes(protocalText);
                SocketAsyncEventArgs saEA = new SocketAsyncEventArgs();
                saEA.Completed +=
                    new EventHandler <SocketAsyncEventArgs>(
                        SendCompletedDoNothing);
                saEA.SetBuffer(sendbuf, 0, sendbuf.Length);
                socket.SendAsync(saEA);
            }
            catch (Exception ex)
            {
                Trace.WriteLine("异常位置:RequestToSendFile");
                Trace.WriteLine(ex.Message);
            }
        }