Example #1
0
File: y.cs Project: rulingcode/caaa
 public abstract void zz_reply(s_reply_data reply);
Example #2
0
File: y.cs Project: rulingcode/caaa
        async void y_s(byte[] data, s_reply_data reply)
        {
            var   packet = p_crypto.convert <m_packet>(data);
            m_key keys   = null;

            if (packet.deviceid != null)
            {
                keys = await a.api2.s_get_key(packet.deviceid);

                if (keys == null)
                {
                    met(null, e_error.invalid_deviceid);
                    return;
                }
                try
                {
                    packet.data = p_crypto.Decrypt(packet.data, keys);
                }
                catch
                {
                    met(null, e_error.invalid_encryption);
                    return;
                }
            }

            var packet_y = p_crypto.convert <m_y>(packet.data);
            var type     = await get(packet_y.yid);

            if (type == null)
            {
                var dv = a.api2.s_xid;
                met(null, e_error.no_implement);
                return;
            }
            var          y = JsonConvert.DeserializeObject(packet_y.data, type) as layer_0.cell.y;
            e_permission p = 0;

            if (packet.deviceid == null)
            {
                p = e_permission.non;
                if (packet_y.userid != null)
                {
                    met(null, e_error.invalid_userid);
                    return;
                }
            }
            else
            {
                if (packet_y.userid == null)
                {
                    p = e_permission.k;
                }
                else
                {
                    switch (packet_y.userid[0])
                    {
                    case 'u': p = e_permission.u; break;

                    case 'x': p = e_permission.x; break;

                    default:
                        met(null, e_error.invalid_userid_prefix);
                        return;
                    }
                }
            }
            if (y.z_permission > p)
            {
                met(null, e_error.invalid_permission);
                return;
            }
            y.z_userid   = packet_y.userid;
            y.z_deviceid = packet.deviceid;
            var error = await a.api2.s_before(y);

            if (error != e_error.non)
            {
                met(null, error);
                return;
            }
            y.zz_reply(met);
            void met(byte[] data, e_error e)
            {
                if (data == null)
                {
                    data = p_crypto.convert(new o_base()
                    {
                        z_error = e
                    });
                }
                if (keys != null)
                {
                    data = p_crypto.Encrypt(data, keys);
                }
                reply(data, e);
            }
        }