Exemplo n.º 1
0
 public static byte[] Read(Stream stream, byte[] end)
 {
     using (MemoryStream ms = new MemoryStream()) {
         byte[] data  = new byte[1];
         int    bytes = data.Length;
         while (bytes > 0 && BaseSocket.findBytes(ms.ToArray(), end, 0) == -1)
         {
             bytes = stream.Read(data, 0, data.Length);
             ms.Write(data, 0, data.Length);
         }
         return(ms.ToArray());
     }
 }
Exemplo n.º 2
0
    public static SocketMessager Parse(byte[] data)
    {
        if (data == null)
        {
            return(new SocketMessager("NULL"));
        }
        if (data.Length == 1 && data[0] == 0)
        {
            return(SocketMessager.SYS_TEST_LINK);
        }
        int    idx  = BaseSocket.findBytes(data, new byte[] { 13, 10 }, 0);
        string text = Encoding.UTF8.GetString(data, 0, idx);

        string[]       loc1 = text.Split(new string[] { "\t" }, 4, StringSplitOptions.None);
        string         loc2 = loc1[0];
        string         loc3 = loc1.Length > 1 ? loc1[1].Replace("\\\\", "\\").Replace("\\t", "\t").Replace("\\n", "\r\n") : null;
        string         loc4 = loc1.Length > 2 ? loc1[2].Replace("\\\\", "\\").Replace("\\t", "\t").Replace("\\n", "\r\n") : null;
        string         loc5 = loc1.Length > 3 ? loc1[3] : null;
        SocketMessager messager;

        using (MemoryStream ms = new MemoryStream()) {
            ms.Write(data, idx + 2, data.Length - idx - 2);
            messager = new SocketMessager(loc3, loc4, ms.Length > 0 ? BaseSocket.Deserialize(ms.ToArray()) : null);
            //using (DeflateStream ds = new DeflateStream(ms, CompressionMode.Decompress)) {
            //	using (MemoryStream msOut = new MemoryStream()) {
            //		ds.CopyTo(msOut);
            //		messager = new SocketMessager(loc3, loc4, ms.Length > 0 ? BaseSocket.Deserialize(ms.ToArray()) : null);
            //	}
            //}
        }
        if (int.TryParse(loc2, out idx))
        {
            messager._id = idx;
        }
        if (!string.IsNullOrEmpty(loc5))
        {
            DateTime.TryParse(loc5, out messager._remoteTime);
        }
        if (messager._arg is Exception)
        {
            messager._exception = messager._arg as Exception;
        }
        return(messager);
    }