创建web api控制器 添加Fluent Nhibernate插件
以下为服务器
using
System;
using
System.Collections.Generic;
using
System.Linq;
usingSystem.Net;
usingSystem.Net.Http;
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
yield
return
www;
Debug.Log(www.text);
{
//判断信息不为null 表示正确,否则就错误
{
Debug.Log(www.text);
//转换字符
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);
}
}
}