国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

微風IM 3.3 系列之一 實現新用戶注冊

2019-11-17 02:27:31
字體:
來源:轉載
供稿:網友

微風IM 3.3 系列之一 實現新用戶注冊

登陸窗口如下:

本文首先來實現“注冊新賬號功能”

第一步:

打開VS2010 ,找到BasicForm窗體類,這個類是美化窗體的一個基類,我們可以從此窗體繼承

第二步,創建新窗體

RegisterUser.cs

把新窗體RegisterUser繼承的Form類改成BasicForm類

如下圖:

現在新窗體就可以使用BasicForm的樣式了,效果如下:

拖入控件,界面如下:

第三步:

先來回顧一下,在數據庫中相應的表:

我們知道使用TCP通信的時候,客戶端與服務器端進行交互,并不與數據庫直接交互,而是由客戶端與服務器通信,服務器再和數據庫通信。

所以,注冊用戶的流程就是

(1):客戶端注冊頁面中,通過TCP通信,把用戶想要注冊“用戶ID”,“昵稱”,“密碼”發送給服務器。

(2) :服務器對發來的”用戶ID“進行驗證,與數據庫交互,判斷此”用戶ID“是否已經存在,存在則發返回信息給”客戶端“,告知其”用戶已經存在。

如果“用戶ID”符合要求,則插入數據庫相關表中,返回消息給“客戶端”,告知其注冊已經成功

(3):“用戶ID”,“昵稱”,“密碼”需要一個類來存放,我們這里直接使用RcUsers數據表對應的實體類:RcUsers, 此類支持PRotobuf.net序列化

(通過TCP通信,在客戶端與服務器之間傳遞數據類,必須把類序列化成二進制數據,對方收到后,再反序列化出來,我們使用網上開源的protobuf.net序列化器。

當然序列化,反序列化的工作是由 開源的networkcomms2.3.1框架幫我們完成的)

using System;using System.Collections;using System.Collections.Generic;using System.Data;using ProtoBuf;using SimpleIM.Data;namespace SimpleIM.Business{    [ProtoContract]    public class RcUsers    {        #region Constructors        public RcUsers()        { }        #endregion        #region Private Properties        private int id = -1;        private string userID = string.Empty;        private string name = string.Empty;        private string passWord = string.Empty;        private string declaring = string.Empty;        private int status = -1;        private int groupID = -1;        private bool isMale = false;        private int userLevel = -1;        private bool enabled = false;        private DateTime registerTime = DateTime.UtcNow;        private DateTime lastLoginTime = DateTime.UtcNow;        #endregion        #region Public Properties        [ProtoMember(1)]        public int Id        {            get { return id; }            set { id = value; }        }        [ProtoMember(2)]        public string UserID        {            get { return userID; }            set { userID = value; }        }        [ProtoMember(3)]        public string Name        {            get { return name; }            set { name = value; }        }        [ProtoMember(4)]        public string Password        {            get { return password; }            set { password = value; }        }        [ProtoMember(5)]        public string Declaring        {            get { return declaring; }            set { declaring = value; }        }        [ProtoMember(6)]        public int Status        {            get { return status; }            set { status = value; }        }        [ProtoMember(7)]        public int GroupID        {            get { return groupID; }            set { groupID = value; }        }        [ProtoMember(8)]        public bool IsMale        {            get { return isMale; }            set { isMale = value; }        }        [ProtoMember(9)]        public int UserLevel        {            get { return userLevel; }            set { userLevel = value; }        }        [ProtoMember(10)]        public bool Enabled        {            get { return enabled; }            set { enabled = value; }        }        [ProtoMember(11)]        public DateTime RegisterTime        {            get { return registerTime; }            set { registerTime = value; }        }        [ProtoMember(12)]        public DateTime LastLoginTime        {            get { return lastLoginTime; }            set { lastLoginTime = value; }        }        #endregion    }}RcUsers類
View Code

RCUsers類是由CodeSmith模板生成的, 可以參見本博客關于CodeSmith的其他相應文章

NetworkComms網絡通信框架配套CodeSmith模板使用簡介 模板下載地址: 【模板下載】分享我所使用的數據庫框架

我們在微風IM中,使用的存儲過程,數據層代碼,實體類,邏輯層代碼都是通過使用CodeSmith模板生成的(添加功能,需要做對應的修改),極大的提高了工作效率。

言歸正傳,我們開始進行注冊相關的開發:

客戶端代碼:

//定義一個契約類 用于傳遞相關的信息給服務器            RcUsers currentUser = new RcUsers();            //給屬性賦值            currentUser.UserID = txtUserID.Text.Trim();            currentUser.Password = txtPsw.Text.Trim();            currentUser.Name = txtNickName.Text.Trim();            //同步方法  傳遞并序列化契約類到服務器,并從獲取獲取返回的信息  (返回的信息類型為ResMessage)            //RegUser 發送的消息類型            //ResRegUser  接收返回的消息類型            ResMessage regContract = Common.TcpConn.SendReceiveObject<ResMessage>("RegUser", "ResRegUser", 8000, currentUser);            if (regContract.Message == "注冊成功")            {                BasicMsgBoxForm form = new BasicMsgBoxForm("注冊成功", "信息窗口", MessageBoxButtons.OK, MessageBoxIcon.None);                form.StartPosition = FormStartPosition.CenterScreen;                form.ShowDialog();                txtNickName.Text = "";                txtUserID.Text = "";                txtPsw.Text = "";                txtRePsw.Text = "";                             }            else            {                BasicMsgBoxForm form = new BasicMsgBoxForm(regContract.Message, "信息窗口", MessageBoxButtons.OK, MessageBoxIcon.Error);                form.StartPosition = FormStartPosition.CenterScreen;                form.ShowDialog();            }

using System;using System.Collections.Generic;using System.Text;using ProtoBuf;namespace SimpleIM.Business{    //操作結果的返回信息,可通用    [ProtoContract]    public class ResMessage    {        [ProtoMember(1)]        public string Message;        public ResMessage() { }        public ResMessage(string message)        {            this.Message = message;        }    }}

服務器端相應的代碼:

 //注冊新用戶            NetworkComms.AppendGlobalIncomingPacketHandler<RcUsers>("RegUser", IncomingRegisterUser);
復制代碼復制代碼
      //注冊新用戶        private void IncomingRegisterUser(PacketHeader header, Connection connection, RcUsers contract)        {            try            {                                //聲明一個契約類  用于返回數據給客戶端                ResMessage resMessage = new ResMessage();                //判斷用戶是否存在                RcUsers user = DoRcUsers.GetByUserID(contract.UserID);                if (user .Id>-1)                {                    //如果存在,在不進行數據庫操作,直接返回信息給客戶端                    resMessage.Message = "用戶ID已經存在";                }                else                {                    //如果不存在,則添加用戶到數據庫中                    //修改一下用戶的相關信息,暫時手工設定一下,您可根據情況修改                    contract.Declaring = "春暖花開";                    contract.Status = -1;                    contract.IsMale = true;                    contract.UserLevel = 1;                    contract.Enabled = false;                    contract.RegisterTime = DateTime.Now;                    contract.LastLoginTime = DateTime.Now;                    //此處 為了簡便  指定了一個組                    contract.GroupID = 115;                    //添加用戶到數據庫中                    DoRcUsers.Save(contract);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威宁| 黔南| 常熟市| 云南省| 正安县| 陵水| 禹州市| 石棉县| 怀远县| 永靖县| 乌拉特后旗| 延寿县| 南汇区| 丰镇市| 阳江市| 沅陵县| 兴国县| 容城县| 邻水| 呼玛县| 宁河县| 乌兰县| 道孚县| 田东县| 河北区| 眉山市| 内丘县| 东平县| 白玉县| 广宁县| 隆回县| 叙永县| 岑巩县| 马尔康县| 体育| 弥渡县| 杭州市| 万山特区| 沅陵县| 云安县| 凤凰县|