cs
public void reg(Session session, SocketModel model)
{
LoginDTO loginDto = Coding<LoginDTO>.decode(model.Message);
if(loginDto.userName.Length<=17&& loginDto.passWord.Length<=17)
{
bool v = BizUtil.account.create(loginDto.userName, loginDto.passWord);//bool代表注册成功或者失败
session.write(0, 0, 3, (object)new BoolDTO(v));//这个session还需要单独拿时间来学
}
}
0.最简单的一句 session.write(0, 0, 3, (object)new BoolDTO(v));
这句往session中的List队列中写入了一个消息,就是最早的SocketModel格式的,最后的message就一个bool值,代表最终的注册结果成功与否。
1.首先知道注册信息写到什么地方去了,先进create函数
cs
public bool create(string userName, string password)
{
if (this.accounts.ContainsKey(userName))
{
Console.WriteLine("注册失败");
return false;
}
AccountModel accountModel = new AccountModel(Guid.NewGuid().ToString(), userName, password);
return this.accounts.TryAdd(userName, accountModel);
}
2.然后,this.accounts.ContainsKey(userName)的结果代表用户名是否重复,所以其中自然有如何读取,进而判定用户名重复的内容。
先从accounts的定义入手,private ConcurrentDictionary<string, AccountModel> accounts = new ConcurrentDictionary<string, AccountModel>();
accounts是个字典,键是string代表用户名,值是AccountModel结构体。
ContainsKey函数是C#中的Dictionary方法,用于检查Dictionary中是否存在键。
如果键(用户名)已经存在,则注册失败,不存在,则通过以下代码新建一个值
cs
AccountModel accountModel = new AccountModel(Guid.NewGuid().ToString(), userName, password);
再把用户名和这个值加入字典
cs
return this.accounts.TryAdd(userName, accountModel);