/// <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"); } } }
/// <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; }
/// <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); }
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); }); }
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; } }