Example #1
0
        void RecMsg()
        {
            while (isRec)
            {
                try
                {
                    arrMsg = new byte[1024 * 1024 * 2];
                    //接收 对应 客户端发来的消息
                    int length = sokMsg.Receive(arrMsg);

                    Package pk = new Package();
                    pk.UnPack(arrMsg);

                    if (pk.ArrFlag == 0)
                    {
                        //将接收到的消息数组里真实消息转成字符串
                        string strMsg = System.Text.Encoding.UTF8.GetString(pk.ArryPackage, 0, length - 1);
                        //发送到在同一房间的socket;
                        Transpond(strMsg);
                        //通过委托 显示消息到 窗体的文本框
                        dgShowMsg(strMsg);
                    }
                    if (pk.ArrFlag == 2)
                    {
                        //将接收到的消息数组里真实消息转成字符串
                        string strMsg = System.Text.Encoding.UTF8.GetString(pk.ArryPackage, 0, length - 1);
                        //通过委托 显示消息到 窗体的文本框

                        string[]   str = strMsg.Split('|');
                        MethodInfo mi  = this.GetType().GetMethod(str[0]);
                        object[]   ss  = new object[] { strMsg };
                        mi.Invoke(this, ss);
                        dgShowMsg(str[0]);
                        this.sokMsg.Send(arrMsg);
                    }
                    if (pk.ArrFlag == 4)
                    {
                        List <byte> lb      = new List <byte>(arrMsg);
                        byte []     newBuff = lb.GetRange(0, length).ToArray();
                        int         id      = pk.ArryPackage[0];
                        Room        room    = funcGetRoomByRoomId(Convert.ToInt32(id));
                        if (room.hostSock == this.sokMsg)
                        {
                            room.payerSock.Send(newBuff);
                        }
                        else
                        {
                            room.hostSock.Send(newBuff);
                        }
                    }
                }
                catch (Exception)
                {
                    isRec = false;
                    //从主窗体中 移除 下拉框中对应的客户端选择项,同时 移除 集合中对应的 ConnectionClient对象
                    dgRemoveConnection(sokMsg.RemoteEndPoint.ToString());
                }
            }
        }