private bool isSuccess(KeywordMessageType msgType, string passpart, string mac, out string errorInfo) { errorInfo = ""; if (msgType == KeywordMessageType.User) { if (string.Compare(passpart, Service.UserLoginPassword) == 0) { Service.SetMac(mac); return(true); } else { errorInfo = "密码输入错误"; return(false); } } else { string val = ""; bool b = Service.dic.TryGetValue(mac, out val); if (b && string.Compare(val, passpart) == 0) { return(true); } errorInfo = "用户验证错误"; return(false); } }
/// <summary> /// 解析消息包 /// </summary> /// <param name="stream"></param> private void AnalyzeMessageBag(NetworkStream stream, MessageBag bag) { KeywordMessageType type = (KeywordMessageType)bag.Head.Type; switch (type) { case KeywordMessageType.None: break; case KeywordMessageType.User: { byte[] body = bag.BytesBody; UserCheck(stream, body, KeywordMessageType.User); break; } case KeywordMessageType.Upload: { int state = bag.Head.State; if (state == 1) { //首次上传校验信息 byte[] body = bag.BytesBody; string val = UserCheck(stream, body, KeywordMessageType.Upload); //引处校验成功后,将等着接收更新字符串 if (!string.IsNullOrEmpty(val) && val == "sameversion") { MessageBag recBag = ReceiveMessageBag(stream); AnalyzeMessageBag(stream, recBag); } } else { //二次传入更新信息 byte[] body = bag.BytesBody; string updateStr = Encoding.UTF8.GetString(body); //更新本地词库 UpdateServerDict(updateStr); //更改服务器版本号,并保存新增文件 string versionR = GetIncVersion(); Service.DictVersion = versionR; string fileName = versionR; //不加扩展名 SaveFile(fileName, updateStr); //返回"版本号与更新字符串" MessageHead head = new MessageHead((int)KeywordMessageType.Upload, 0, 2); string updateCmd = GetUpdateCmd(); byte[] updateBody = GetBodyBytes(Service.DictVersion, updateCmd); MessageBag returnBag = new MessageBag(head, updateBody); SendMessageBag(stream, returnBag); } break; } case KeywordMessageType.Update: { byte[] body = bag.BytesBody; UserCheck(stream, body, KeywordMessageType.Update); break; } default: break; } }
/// <summary> /// 用户验证 /// </summary> /// <param name="body"></param> private string UserCheck(NetworkStream stream, byte[] body, KeywordMessageType msgType) { string resultVal = ""; string all = Encoding.UTF8.GetString(body); string[] arrstr = all.Split(new[] { '&' }, StringSplitOptions.None); passpart = arrstr[0]; version = arrstr[1]; mac = arrstr[2]; int cmd = 0; //验证密码是否正确 //成功,为真;失败为假 string errorInfo = ""; bool value = isSuccess(msgType, passpart, mac, out errorInfo); if (!value) { MessageHead head = new MessageHead((int)msgType, 0, 0); byte[] info = Encoding.UTF8.GetBytes(errorInfo); MessageBag bag = new MessageBag(head, info); SendMessageBag(stream, bag); resultVal = ""; } else { string newId = Service.GetSessionId(); Service.SetSessionId(mac, newId); //验证版本号 if (string.Compare(version, Service.DictVersion) == 0) { if (msgType == KeywordMessageType.Upload) { cmd = 1; } MessageHead head = new MessageHead((int)msgType, cmd, 1); byte[] idBody = Encoding.UTF8.GetBytes(newId); MessageBag bag = new MessageBag(head, idBody); SendMessageBag(stream, bag); resultVal = "sameversion"; } else { if (msgType == KeywordMessageType.Upload) { cmd = 2; } MessageHead head = new MessageHead((int)msgType, cmd, 2); string updateCmd = GetUpdateCmd(); byte[] updateBody = GetBodyBytes(newId, Service.DictVersion, updateCmd); MessageBag bag = new MessageBag(head, updateBody); SendMessageBag(stream, bag); resultVal = ""; } } return(resultVal); }
/// <summary> /// 解析服务器返回的用户验证后的消息包 /// </summary> /// <param name="bag"></param> /// <returns></returns> public string AnalyzeResponeMessage(MessageBag bag) { int state = 0; KeywordMessageType type = (KeywordMessageType)bag.Head.Type; if (type == KeywordMessageType.User || type == KeywordMessageType.Update) { state = bag.Head.State; switch (state) { case 0: //失败 byte[] bytes = bag.BytesBody; return(Encoding.UTF8.GetString(bytes)); case 1: //成功,版本一样 byte[] idBytes = bag.BytesBody; Service.SessionId = Encoding.UTF8.GetString(idBytes); return("true"); case 2: //成功,版本不一样 AnalyzeBodyBytes(bag); return("true"); default: break; } } if (type == KeywordMessageType.Upload) { //1为验证; 2为更新 state = bag.Head.State; if (state == 1) { //0,表失败; 1表成功,并版本号一样; 2表成功,版本号不一样 int cmd = bag.Head.Cmd; switch (cmd) { case 0: byte[] bytes = bag.BytesBody; return(Encoding.UTF8.GetString(bytes)); case 1: //可以上传更新 byte[] idBytes = bag.BytesBody; Service.SessionId = Encoding.UTF8.GetString(idBytes); return("versionSameOfSuccess"); case 2: //更新本地版本,重新显示 AnalyzeBodyBytes(bag); return("versionDifferentOfSuccess"); default: break; } } else //状态为2 ,表示上传更新 { byte[] Bytes = bag.BytesBody; //解析版本号 byte[] versionByte = new byte[versionLength]; Array.Copy(Bytes, 0, versionByte, 0, versionLength); Service.DictVersion = Encoding.UTF8.GetString(versionByte); //更新本地词库的字符串 int leg = versionLength + sessionIdLength; int length = Bytes.Length - versionLength; byte[] bodyBytes = new byte[length]; Array.Copy(Bytes, versionLength, bodyBytes, 0, length); string body = Encoding.UTF8.GetString(bodyBytes); Service.UpdateLocalDict(body); return("true"); //更新本地词库成功 } } return(""); }