///<summary> ///当bool=true且type为TEXT时,更新last_textmes /// </summary> public bool decodemes(byte[] jsonb, out mestype type) { bool ret = false; type = mestype.UNDEFINED; try { string jsonmes = Encoding.UTF8.GetString(jsonb); JObject jsonobject = JObject.Parse(jsonmes); int id = (int)jsonobject["id"]; string type_s = (string)jsonobject["type"]; string time_s = (string)jsonobject["time"]; string md5 = (string)jsonobject["md5"]; md5 = md5.ToLower(); type = get_type(type_s); switch (type) { case mestype.RESPONSE: case mestype.EXIT: { List<byte[]> con_byte = new List<byte[]>(); con_byte.Add(BitConverter.GetBytes(id)); con_byte.Add(Encoding.UTF8.GetBytes(type_s)); con_byte.Add(Encoding.UTF8.GetBytes(time_s)); if (md5_verification(byte_connect(con_byte),md5)) ret = true; else { type = mestype.UNDEFINED; ret = false; } break; } case mestype.TEXT: { List<byte[]> con_byte = new List<byte[]>(); string data_name = (string)jsonobject["data"]["name"]; string data_text_utf8 = (string)jsonobject["data"]["text"]; con_byte.Add(BitConverter.GetBytes(id)); con_byte.Add(Encoding.UTF8.GetBytes(type_s)); con_byte.Add(Encoding.UTF8.GetBytes(time_s)); con_byte.Add(Encoding.UTF8.GetBytes(data_name)); con_byte.Add(Encoding.UTF8.GetBytes(data_text_utf8)); if (md5_verification(byte_connect(con_byte), md5)) { last_textmes.id = id; last_textmes.time = DateTime.ParseExact(time_s, "yyyy.MM.dd HH:mm:ss", null); last_textmes.name = data_name; last_textmes.text = data_text_utf8; ret = true; } else { type = mestype.UNDEFINED; ret = false; } break; } default: { type = mestype.UNDEFINED; ret = false; break; } } } catch (Exception e) { ret = false; } return ret; }
///<summary> ///当bool=true且type为TEXT时,从send_textmes中拿取信息生成jsonb,否则直接生成其他的type ///<para>生成其他的type的时候,会利用到send_textmes中的id与Time信息。</para> /// </summary> public bool encodemes(mestype type, out byte[] jsonb) { bool ret = false; jsonb = null; try { string s = string.Empty; s += "{"; s += "\"id\":" + send_textmes.id.ToString() + ","; switch (type) { case mestype.EXIT: { s += "\"type\":\"exit\","; s += "\"time\":\"" + send_textmes.time.ToString("yyyy.MM.dd HH:mm:ss") + "\","; s += "\"else\":{},"; s += "\"data\":{},"; List<byte[]> con_byte = new List<byte[]>(); con_byte.Add(BitConverter.GetBytes(send_textmes.id)); con_byte.Add(Encoding.UTF8.GetBytes("exit")); con_byte.Add(Encoding.UTF8.GetBytes(send_textmes.time.ToString("yyyy.MM.dd HH:mm:ss"))); s += "\"md5\":\"" + getmd5(byte_connect(con_byte)) + "\""; s += "}"; jsonb = Encoding.UTF8.GetBytes(s); ret = true; break; } case mestype.RESPONSE: { s += "\"type\":\"response\","; s += "\"time\":\"" + send_textmes.time.ToString("yyyy.MM.dd HH:mm:ss") + "\","; s += "\"else\":{},"; s += "\"data\":{},"; List<byte[]> con_byte = new List<byte[]>(); con_byte.Add(BitConverter.GetBytes(send_textmes.id)); con_byte.Add(Encoding.UTF8.GetBytes("response")); con_byte.Add(Encoding.UTF8.GetBytes(send_textmes.time.ToString("yyyy.MM.dd HH:mm:ss"))); s += "\"md5\":\"" + getmd5(byte_connect(con_byte)) + "\""; s += "}"; jsonb = Encoding.UTF8.GetBytes(s); ret = true; break; } case mestype.TEXT: { s += "\"type\":\"text\","; s += "\"time\":\"" + send_textmes.time.ToString("yyyy.MM.dd HH:mm:ss") + "\","; s += "\"else\":{},"; s += "\"data\":{"; s += "\"name\":\"" + add_special_char(send_textmes.name) + "\","; s += "\"text\":\"" + add_special_char(send_textmes.text) + "\""; s += "},"; List<byte[]> con_byte = new List<byte[]>(); con_byte.Add(BitConverter.GetBytes(send_textmes.id)); con_byte.Add(Encoding.UTF8.GetBytes("text")); con_byte.Add(Encoding.UTF8.GetBytes(send_textmes.time.ToString("yyyy.MM.dd HH:mm:ss"))); con_byte.Add(Encoding.UTF8.GetBytes(send_textmes.name)); con_byte.Add(Encoding.UTF8.GetBytes(send_textmes.text)); s += "\"md5\":\"" + getmd5(byte_connect(con_byte)) + "\""; s += "}"; jsonb = Encoding.UTF8.GetBytes(s); ret = true; break; } default: { ret = false; jsonb = null; break; } } } catch (Exception e) { ret = false; jsonb = null; } return ret; }