示例#1
0
 private void send(P2pMessage message)
 {
     try
     {
         MemoryStream mStream = new MemoryStream();
         //DataContractSerializer formatter = new DataContractSerializer(message.GetType()) ;
         IFormatter formatter = new BinaryFormatter();
         //formatter.WriteObject(mStream, message);
         formatter.Serialize(mStream, message);
         mStream.Flush();
         mStream.Position = 0;
         byte[]        buff    = new byte[4096];
         int           len     = 0;
         NetworkStream nStream = serverSocket.GetStream();
         while ((len = mStream.Read(buff, 0, buff.Length)) > 0)
         {
             nStream.Write(buff, 0, len);
         }
         mStream.Flush();
         mStream.Position = 0;
     }
     catch (System.Exception ex)
     {
         Console.WriteLine(ex.ToString());
     }
 }
示例#2
0
        //发送消息的button
        private void sendBtn_Click(object sender, EventArgs e)
        {
            string msg = sendRichBox.Rtf;

            sendRichBox.Text = String.Empty;
            P2pMessage message = new P2pMessage();

            message.HostId    = hostId;
            message.GuestId   = guestItem.ID;
            message.GuestName = session.User.Username;
            message.Contents  = msg;
            message.Time      = DateTime.Now;
            message.Face      = "";
            message.image     = "";
            //判断对方是否在线,不在就存到数据库中
            if (guestModel.Status == 1)
            {
                this.send(message);
            }
            else
            {
                MessageBll.addP2pMessage(message);//保存数据库
            }


            this.appendText(message);
        }
示例#3
0
        protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List <object> output)
        {
            byte[] encoded = new byte[input.ReadableBytes];
            input.ReadBytes(encoded);
            P2pMessage message = (P2pMessage)this.message_factory.Create(encoded);

            Logger.Info(
                string.Format("Handshake Receive from {0}, {1}",
                              context.Channel.RemoteAddress,
                              message));

            switch (message.Type)
            {
            case MsgType.P2P_HELLO:
                HandleHelloMessage(context, (HelloMessage)message);
                break;

            case MsgType.P2P_DISCONNECT:
                if (this.channel.NodeStatistics != null)
                {
                    this.channel.NodeStatistics.NodeDisconnectedRemote(((DisconnectMessage)message).Reason);
                }
                this.channel.Close();
                break;

            default:
                this.channel.Close();
                break;
            }
        }
示例#4
0
        private void service()
        {
            while (receiveFlag)
            {
                P2pMessage msg = null; //接收到的信息对象,放这里主要是为了解决appendText的异步问题
                try
                {
                    this.serverSocket = P2pServerSocket.socketDict[guestId];
                    byte[]       buff    = new byte[4096];
                    MemoryStream mStream = new MemoryStream();
                    mStream.Position = 0;
                    NetworkStream nStream = serverSocket.GetStream();
                    while (true)
                    {
                        int len = nStream.Read(buff, 0, buff.Length);
                        mStream.Write(buff, 0, len);
                        if (len < 4096)
                        {
                            break;
                        }
                    }
                    BinaryFormatter formmater = new BinaryFormatter();
                    //DataContractSerializer formmater = new DataContractSerializer(typeof(P2pMessage));
                    //mStream.Flush();
                    mStream.Position = 0;
                    if (mStream.Capacity > 0)
                    {
                        //msg = (P2pMessage)formmater.ReadObject(mStream);
                        msg = formmater.Deserialize(mStream) as P2pMessage;
                        appendText(msg);
                    }
                }catch (System.Runtime.Serialization.SerializationException ex)
                {
                    Console.WriteLine(ex.ToString());
                }
                catch (System.ObjectDisposedException ex)
                {
                    string test = ex.Message;
                    //appendText(msg);
                }
                catch //如果对方退出了程序
                {
                    if (serverSocket != null)
                    {
                        serverSocket.Close();
                        serverSocket = null;
                    }

                    if (P2pServerSocket.socketDict.ContainsKey(guestId))
                    {
                        P2pServerSocket.socketDict.Remove(guestId);
                    }
                    initSocket();
                    Thread.Sleep(1000);
                }
            }
        }
示例#5
0
        public delegate void InvokeDelegate(P2pMessage msg); //事件委托,跨线程调用winform控件需要

        private void appendText(P2pMessage msg)              //给messageBox添加
        {
            if (messageRichBox.InvokeRequired)
            {
                InvokeDelegate invoke = new InvokeDelegate(appendText);
                this.Invoke(invoke, new object[] { msg });
            }
            else
            {
                this.messageRichBox.AppendText(msg.GuestName + " [" + msg.Time.ToString() + "] \r\n");
                this.messageRichBox.AppendRtf(msg.Contents);
                this.messageRichBox.AppendTextAsRtf("\r\n");
                this.messageRichBox.ScrollToCaret();
            }
        }
示例#6
0
 public abstract void write(P2pMessage message);
示例#7
0
 public abstract void read(P2pMessage message);