http弱联网+数据库登录

创建web api控制器  添加Fluent Nhibernate插件



以下为服务器

using System;
using System.Collections.Generic;
using System.Linq;
usingSystem.Net;
using System.Web.Http;
using HttpWebServer0501.Models;
using LitJson;
namespace HttpWebServer0501.Controllers
{
    /// <summary>
    /// 弱联网 http
    /// </summary>
    public class ValuesController : ApiController
    {
        //创建字典  设置键值对  键为协议号   值为消息类
        Dictionary< int , MsgHandler> dic = new Dictionary< int , MsgHandler>();
        public ValuesController()
        {
            Init();
        }
        private void Init()
        {
            //实例化模块  登录/注册
            LoginModels login = new LoginModels();
            //添加到字典中   键为协议号int,值为LoginModels的Login方法
            dic.Add(10001, login.Login);
            dic.Add(10002, login.Register);
        }
        // GET api/values
        public IEnumerable< string > Get()
        {
            return new string [] { "value1" , "value2" };
        }
        // GET api/values/5
        public string Get( int id)
        {
            return "value" ;
        }
        // POST api/values
        /// <summary>
        /// 转json
        /// 拿到协议号,转为int类型
        /// 尝试去获取值 传入键值
        /// 判断值不为空返回消息 传入json
        /// </summary>
        /// <param name=" value "></param>
        /// <returns></returns>
        public string Post([FromBody] string value)
        {
            //解析json
            JsonData data = LitJson.JsonMapper.ToObject(value);
            //拿到协议号转为int类型
            int protocol = int .Parse(data[ "protocol" ].ToString());
            MsgHandler msg;
            //尝试取值
            dic.TryGetValue(protocol, out msg);
            //判断消息类对象不为空时返回json消息  否则就返回null
            if (msg != null )
            {
                return msg(data);
            }
            return null ;
        }
        // PUT api/values/5
        public void Put( int id, [FromBody] string value)
        {
        }
        // DELETE api/values/5
        public void Delete( int id)
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace HttpWebServer0501.Models
{
    /// <summary>
    /// 设置数据库属性
    /// 属性要与数据库一致
    /// </summary>
    public class Account
    {
        public virtual int id { get ; set ; }
        public virtual string username { get ; set ; }
        public virtual string password { get ; set ; }
    }
}


using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace HttpWebServer0501.Models
{
    /// <summary>
    /// 继承classmap 传入要映射的类
    /// 设置 数据库表名 主键和非主键
    /// </summary>
    public class AccountMap : ClassMap<Account>
    {
        public AccountMap()
        {
            Table("haha");
            Id(x => x.id).Column("id");
            Map(x => x.username).Column("username");
            Map(x => x.password).Column("password");
        }
    }
}

using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace HttpWebServer0501.Models
{
    /// <summary>
    /// 根据登陆记录相关的数据库数据
    /// </summary>
    public class DBAccountCollider
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name=" username "></param>
        /// <param name=" password "></param>
        public static void AddAccount( string username, string password)
        {
            //获取
            ISession session = NHibernateHelper.OpenSession();
            //实例化属性类
            Account account = new Account();
            //传值
            account.username = username;
            account.password = password;
            //保存到ISession对象中
            session.Save(account);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name=" username "></param>
        /// <param name=" password "></param>
        public static Account SelectAccount( string username)
        {
            //获取
            ISession session = NHibernateHelper.OpenSession();
            //按照名字查询,返回一个IList对象
            IList<Account> list = session.QueryOver<Account>().Where(x => x.username == username).List();
            //判断数量大于0 返回第一个下标  就是要找的数据  否则就返回null
            if (list.Count > 0)
            {
                return list[0];
            }
            return null ;
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LitJson;
namespace HttpWebServer0501.Models
{
    /// <summary>
    /// 登录注册模块
    /// </summary>
    public class LoginModels
    {
        /// <summary>
        /// 登录  
        /// 设置协议号   10001
        /// 判断用户名和密码是否一致,分别返回ture和false
        /// </summary>
        /// <param name=" msg "></param>
        /// <returns></returns>
        public string Login(JsonData msg)
        {
            //创建json
            JsonData data = new JsonData();
            //将用户名和密码转为string类型
            string username = msg[ "username" ].ToString();
            string password = msg[ "password" ].ToString();
            //设置协议号
            data[ "protocol" ] = "10001" ;
            //调用查询数据库类的用户名 返回Account类型
            Account account = DBAccountCollider.SelectAccount(username);
            //判断属性类如果为空就提示用户名不存在
            if (account == null )
            {
                data[ "res" ] = "false" ;
                data[ "error" ] = "User name does not exist." ; //用户名不存在
                return data.ToJson();
            }
            //判断属性中的密码和输入的密码不一致提示信息
            if (account.password != password)
            {
                data[ "res" ] = "false" ;
                data[ "error" ] = "Incorrect password!" ; //密码输入有误
                return data.ToJson();
            }
            //否则就是正确的
            data[ "res" ] = "true" ;
            data[ "error" ] = "login successfully" ; //登录成功
            return data.ToJson();   //返回json
        }
        /// <summary>
        /// 注册
        /// </summary>
        /// <param name=" msg "></param>
        /// <returns></returns>
        public string Register(JsonData msg)
        {
            //创建json
            JsonData data = new JsonData();
            //用户名密码转为string类型
            string username = msg[ "username" ].ToString();
            string password = msg[ "password" ].ToString();
            //按照名字查询
            Account account = DBAccountCollider.SelectAccount(username);
            data["protocol"] = 10002;//设置注册协议号
            //判断对象不为空
            if (account != null )
            {
                data[ "res" ] = "false" ;
                data[ "error" ] = "The user name already exists." ; //用户名已存在
                return data.ToJson();
            }
            //否则 添加到数据库中
            else
            {
                DBAccountCollider.AddAccount(username, password);
                data[ "res" ] = "true" ;
                data[ "error" ] = "registered successfully" ; //注册成功
                return data.ToJson();
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using LitJson;
/// <summary>
/// 消息类  委托类型
/// 括号里用什么就传什么
/// </summary>
/// <param name=" msg "></param>
/// <returns></returns>
public delegate string MsgHandler (JsonData msg);

using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 映射类
/// </summary>
    class NHibernateHelper
    {
        private static ISessionFactory sessionFactory = null ;
    //  需要提供iP mysql中的表名 还有用户名和密码 以及在哪个dll文件下生产
    private static void InitializeSessionFactory()
        {
            sessionFactory = Fluently.Configure()
             .Database(MySQLConfiguration.Standard.ConnectionString(db => db
            .Server("127.0.0.1")//本机地址
            .Database("test")//库名
            .Username("root")//用户名
            .Password("4664")))//密码
             .Mappings(m => m.FluentMappings.AddFromAssemblyOf<NHibernateHelper>())
             .ExposeConfiguration(e => e.Properties.Add( "hbm2ddl.keywords" , "none" ))
             .BuildSessionFactory();
        }
        private static ISessionFactory SessionFactory
        {
            get
            {
                if (sessionFactory == null )
                    InitializeSessionFactory();
                return sessionFactory;
            }
        }
        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }

以下为客户端

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System;
using UnityEngine.SceneManagement;
public class httpMgr : MonoBehaviour
{
    //获取相应的组件
    public UIInput usernameinput, passwordinput;
    public UIButton loginbtn, registerbtn;
   
    void Start ()
    {
        UIEventListener.Get(loginbtn.gameObject).onClick += LoginBtn;
        UIEventListener.Get(registerbtn.gameObject).onClick += RegisterBtn;
       
    }
    /// <summary>
    /// 登录按钮
    /// </summary>
    /// <param name=" go "></param>
    private void LoginBtn(GameObject go)
    {
        //创建json
        JsonData data = new JsonData();
        //设置协议号  10001
        data[ "protocol" ] = "10001" ;
        //获取用户名和密码输入框的值
        data["username"] = usernameinput.value;
        data["password"] = passwordinput.value;
        //转为json格式返回string类型    启动协同
        string msg = data.ToJson();
        StartCoroutine(SendMsg(msg));
        //跳转到群聊场景
        SceneManager.LoadScene("client");
    }
    /// <summary>
    /// 注册按钮
    /// </summary>
    /// <param name=" go "></param>
    private void RegisterBtn(GameObject go)
    {
        //创建json
        JsonData data = new JsonData();
        //设置协议号  10002
        data[ "protocol" ] = "10002" ;
        //获取用户名和密码输入框转为string类型
        data["username"] = usernameinput.value;
        data["password"] = passwordinput.value;
        //转为json格式返回string类型  启动协同
        string msg = data.ToJson();
        StartCoroutine(SendMsg(msg));
    }
    public IEnumerator SendMsg( string msg)
    {
        //创建表单
        WWWForm form = new WWWForm();
        //添加字段
        form.AddField("", msg);
        //实例化www传入url
        WWW www = new WWW( " http://localhost:9090/api/values " , form);
        yield return www;
        Debug.Log(www.text);
        if ( www.error == null ) //错误为空表示没有错误,否则就输出错误
        {
            //判断信息不为null 表示正确,否则就错误
            if ( www.text != null )
            {
                Debug.Log(www.text);
                //转换字符
                string str = www.text.Replace ( "\\" , "" );
                str = str.Remove(0, 1);
                str = str.Remove(str.Length - 1, 1);
                //解析json
                JsonData data = JsonMapper.ToObject(str);
                //将协议号转为int类型
                int protocol = int .Parse(data[ "protocol" ].ToString());
                //转为string类型
                string res = data[ "res" ].ToString();
                string error = data[ "error" ].ToString();
 
                //输出
                Debug.Log(res);
                Debug.Log(error);
                //清空
                usernameinput.text = "" ;
                passwordinput.text = "" ;
            }
            else
            {
                Debug.Log("啥错???????");
            }
        }
        else
        {
            Debug.Log(www.error);
        }
    }
}

  

猜你喜欢

转载自blog.csdn.net/weixin_42090285/article/details/80169375