コード例 #1
0
ファイル: UserViewModel.cs プロジェクト: zixing131/TencentQQ
        /// <summary>
        /// Saves the User to the repository.  This method is invoked by the SaveCommand.
        /// </summary>
        public void Login()
        {
            if (!_User.IsValid)
            {
                throw new InvalidOperationException(Resources.UserViewModel_Exception_CannotSave);
            }

            if (!this.IsLogin)
            {
                //连接网络
                IPAddress mIPAddress;
                if (IPAddress.TryParse(GlobalVar.mLocalConfig.strServerHost, out mIPAddress))
                {
                    //有效ip地址
                    GlobalVar.mLocalConfig.strServerIp = GlobalVar.mLocalConfig.strServerHost;
                }
                else
                {
                    IPHostEntry hostinfo = Dns.GetHostEntry(GlobalVar.mLocalConfig.strServerHost);
                    IPAddress[] aryIP    = hostinfo.AddressList;
                    GlobalVar.mLocalConfig.strServerIp = aryIP[0].ToString();
                }
                uint ip = (uint)Config.LocalConfig.IpToInt(GlobalVar.mLocalConfig.strServerIp);
                MyLibInterface._InitServer(ip, (uint)(GlobalVar.mLocalConfig.iServerPort), 1);
                char[] strIp = new char[20];
                GlobalVar.mLocalConfig.strServerIp.CopyTo(0, strIp, 0, GlobalVar.mLocalConfig.strServerIp.Length);
                bool Ret = MyLibInterface.OnConnectA(mCallBackFuctions.mNetLibCallback, strIp, GlobalVar.mLocalConfig.iServerPort, 1);
                if (!Ret)
                {
                    System.Windows.MessageBox.Show("连接失败,请检查是否启动StartSystem");
                }
            }
        }
コード例 #2
0
ファイル: UserViewModel.cs プロジェクト: zixing131/TencentQQ
        /// <summary>
        ///唯一委托
        /// </summary>
        public void NetEventResult(TransmitParameters.CallArgus mCallArgu)
        {
            //登录成功
            lock (thisLock)
            {
                switch (mCallArgu.net_argu.type)
                {
                case 0x0000:
                {
                    //NotifyNewConnection
                    //服务器已连接
                    this.mCallBackFuctions._Socket = mCallArgu.net_argu.socket;
                    uint id = 0;
                    uint.TryParse(this.Id, out id);
                    MyLibInterface._InitId(id);
                    byte[] pwd = System.Text.Encoding.ASCII.GetBytes(Password);
                    MyLibInterface._InitPassword(pwd, (uint)pwd.Length);

                    TransmitParameters.Pack mPack = new TransmitParameters.Pack();
                    mPack.type = 0x0825;
                    TransmitParameters.PackArgus mPackArgus = new TransmitParameters.PackArgus();
                    mPackArgus.ispack    = true;
                    mPackArgus.pack_data = mPack;
                    TransmitParameters.CallArgus mCallArgus = new TransmitParameters.CallArgus();
                    mCallArgus.pack_argu = mPackArgus;

                    SendPacket(0x0825);
                } break;

                case 0x0001:
                {
                    byte[] msg  = new byte[1024];
                    uint   size = (uint)msg.Length;
                    MyLibInterface.unPackPacket(mCallArgu.net_argu.send_recv_data, (uint)mCallArgu.net_argu.send_recv_data.Length, ref msg, ref size);


                    MemoryStream ms = new MemoryStream();
                    ms.Write(msg, 0, (int)size);
                    ms.Position = 0;
                    TransmitParameters.CallArgus temp = ProtoBuf.Serializer.Deserialize <TransmitParameters.CallArgus>(ms);

                    PacketMessageHander(temp);
                } break;

                case 0x0002:
                {
                    //NotifyDisconnectedClient
                    //重新开始登陆
                    mCallBackFuctions._Socket = 0;
                    dispatcherTimer.Stop();
                    _User.LogoutUser();
                    base.OnPropertyChanged("IsLogin");
                    //System.Windows.MessageBox.Show("终结socket");
                } break;
                }
            }
            return;
        }
コード例 #3
0
 /// <summary>
 /// Saves the IocpParam to the repository.  This method is invoked by the SaveCommand.
 /// </summary>
 public void Save()
 {
     bEnableSet = false;
     _UserRepository.SetIocpParam(_IocpParam);
     MyLibInterface.StartTheSystem(
         _UserRepository.GetIocpParam().iPortNr,
         _UserRepository.GetIocpParam().iMaxNumberOfConnections,
         _UserRepository.GetIocpParam().iNrOfIOWorkers,
         _UserRepository.GetIocpParam().iNrOfLogicalWorkers,
         _UserRepository.GetIocpParam().iMaxNrOfFreeBuff,
         _UserRepository.GetIocpParam().iMaxNrOfFreeContext,
         _UserRepository.GetIocpParam().bSendInOrder,
         _UserRepository.GetIocpParam().bReadInOrder,
         _UserRepository.GetIocpParam().iNrOfPendlingReads);
 }
コード例 #4
0
ファイル: UserViewModel.cs プロジェクト: zixing131/TencentQQ
        public void SendPacket(ushort packet_type, TransmitParameters.ToPackArgu toPackArgu = null)
        {
            TransmitParameters.CallArgus mCallArgus1 = new TransmitParameters.CallArgus();
            mCallArgus1.pack_argu            = new TransmitParameters.PackArgus();
            mCallArgus1.pack_argu.toPackArgu = new TransmitParameters.ToPackArgu();
            if (toPackArgu == null)
            {
                mCallArgus1.pack_argu.toPackArgu = new TransmitParameters.ToPackArgu();
            }
            else
            {
                mCallArgus1.pack_argu.toPackArgu = toPackArgu;
            }
            mCallArgus1.pack_argu.toPackArgu.type = packet_type;
            MemoryStream ms1 = new MemoryStream();

            ProtoBuf.Serializer.Serialize(ms1, mCallArgus1);

            byte[] msg  = new byte[1024];
            uint   size = (uint)msg.Length;

            MyLibInterface.PackPacket(ms1.ToArray(), (uint)ms1.Length, ref msg, ref size);

            MemoryStream ms2 = new MemoryStream();

            ms2.Write(msg, 0, (int)size);
            ms2.Position = 0;
            TransmitParameters.CallArgus mCallArgus = ProtoBuf.Serializer.Deserialize <TransmitParameters.CallArgus>(ms2);
            MyLibInterface.SendPacket(mCallBackFuctions._Socket, mCallArgus.pack_argu.pack_data.msg, (uint)mCallArgus.pack_argu.pack_data.msg.Length);

            System.Threading.ThreadPool.QueueUserWorkItem(delegate
            {
                UserMsg userMsg = new UserMsg();
                userMsg.isSend  = true;
                userMsg.cTime   = DateTime.Now.ToString("HH:mm:ss");
                userMsg.Code    = packet_type;
                userMsg.Msg     = mCallArgus.pack_argu.pack_data.msg;
                Application.Current.Dispatcher.Invoke(new AddAStudentEvent(this.AddAStudent), userMsg);
            });
        }
コード例 #5
0
ファイル: UserViewModel.cs プロジェクト: zixing131/TencentQQ
        public void PacketMessageHander(TransmitParameters.CallArgus mCallArgu)
        {
            if (!mCallArgu.isCallSucess)
            {
                return;
            }

            System.Threading.ThreadPool.QueueUserWorkItem(delegate
            {
                UserMsg userMsg = new UserMsg();
                userMsg.isSend  = false;
                userMsg.cTime   = DateTime.Now.ToString("HH:mm:ss");
                userMsg.Code    = mCallArgu.pack_argu.unpack_data.type;
                userMsg.Msg     = mCallArgu.pack_argu.unpack_data.data;
                Application.Current.Dispatcher.Invoke(new AddAStudentEvent(this.AddAStudent), userMsg);
            });

            switch (mCallArgu.pack_argu.unpack_data.type)
            {
            case 0x0825:
            {
                if (mCallArgu.pack_argu.unpack_data.isTurnIp)
                {
                    //需要中转IP
                    MyLibInterface.OnDisconnect(mCallBackFuctions._Socket);

                    GlobalVar.mLocalConfig.strServerIp = Config.LocalConfig.IntToIp(mCallArgu.pack_argu.unpack_data.serverip);

                    uint ip = (uint)Config.LocalConfig.IpToInt(GlobalVar.mLocalConfig.strServerIp);
                    MyLibInterface._InitServer(ip, (uint)(GlobalVar.mLocalConfig.iServerPort), 1);
                    char[] strIp = new char[20];
                    GlobalVar.mLocalConfig.strServerIp.CopyTo(0, strIp, 0, GlobalVar.mLocalConfig.strServerIp.Length);
                    MyLibInterface.OnConnectA(mCallBackFuctions.mNetLibCallback, strIp, GlobalVar.mLocalConfig.iServerPort, 1);
                }
                else
                {
                    SendPacket(0x0836);
                }
            } break;

            case 0x0836:
            {
                if (!mCallArgu.pack_argu.unpack_data.is0836Suc)
                {
                    if (mCallArgu.loginresult.notifyMsg == "NEED_LOGINVERIFYAGAIN")
                    {
                        SendPacket(0x0836);
                        break;
                    }
                    else
                    {
                        System.Windows.MessageBox.Show(mCallArgu.loginresult.notifyMsg);
                        return;
                    }
                }
                else
                {
                    SendPacket(0x0828);
                }
            } break;

            case 0x0828:
            {
                if (!mCallArgu.pack_argu.unpack_data.is0828Suc)
                {
                    System.Windows.MessageBox.Show(mCallArgu.loginresult.notifyMsg);
                    return;
                }
                else
                {
                    TransmitParameters.ToPackArgu toPackArgu = new TransmitParameters.ToPackArgu();
                    toPackArgu.type = 0x001D;
                    toPackArgu.msg  = new byte[] { 0x34 };
                    SendPacket(0x001D, toPackArgu);
                    toPackArgu.msg = new byte[] { 0x12 };
                    SendPacket(0x001D, toPackArgu);
                    toPackArgu.msg = new byte[] { 0x26 };
                    SendPacket(0x001D, toPackArgu);
                    toPackArgu.type = 0x01BB;
                    toPackArgu.msg  = new byte[] { 0x01,
                                                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
                    SendPacket(0x01BB, toPackArgu);
                    toPackArgu.msg = new byte[] { 0x03, 0x00, 0x01, 0x00, 0x00 };
                    SendPacket(0x01BB, toPackArgu);
                    //SendPacket(0x0422);
                    SendPacket(0x0134);
                    //发送00EC导致下线
                    SendPacket(0x00EC);
                    SendPacket(0x00D1);
                    toPackArgu.type = 0x001D;
                    toPackArgu.msg  = new byte[] { 0x20 };
                    SendPacket(0x001D, toPackArgu);
                    toPackArgu.msg = new byte[] { 0x21 };
                    SendPacket(0x001D, toPackArgu);
                    toPackArgu.msg = new byte[] { 0x22 };
                    SendPacket(0x001D, toPackArgu);
                    toPackArgu.msg = new byte[] { 0x31 };
                    SendPacket(0x001D, toPackArgu);
                    SendPacket(0x0001);
                }
            } break;

            case 0x00EC:
            {
                _User.LoginUser();
                base.OnPropertyChanged("IsLogin");
                System.Windows.MessageBox.Show("登陆成功");
                dispatcherTimer.Start();
            } break;

            case 0x0017:
            {
                TransmitParameters.ToPackArgu toPackArgu = new TransmitParameters.ToPackArgu();
                toPackArgu.type = 0x0017;
                toPackArgu.msg  = new byte[0x10];
                toPackArgu.seq  = mCallArgu.pack_argu.unpack_data.seq;
                Array.Copy(mCallArgu.pack_argu.unpack_data.data, toPackArgu.msg, 0x10);
                SendPacket(0x0017, toPackArgu);
            } break;

            default:
            {
                //消息
            } break;
            }
        }