using FLY.FeedbackRenZiJia.Common;
using FLY.FeedbackRenZiJia.IService;
using FLY.FeedbackRenZiJia.OBJ_INTERFACE;
using FObjBase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FLY.FeedbackRenZiJia.Server.OBJProxy
{
    public class SnapShotBuf_OBJProxy : FObj
    {
        #region markno

        #endregion
        ISnapShotBuf data;
        public SnapShotBuf_OBJProxy(int objsys_idx, ISnapShotBuf data):base(objsys_idx)
        {
            ID = OBJ_INTERFACE_ID.SNAPSHOT_ID;

            this.data = data;

        }

        public override void CallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] infodata)
        {
            switch (funcid)
            {

                case SNAPSHOT_OBJ_INTERFACE.CALL_GET_SNAPSHOT:
                    {
                        SNAPSHOT_OBJ_INTERFACE.Pack_Int p = new SNAPSHOT_OBJ_INTERFACE.Pack_Int();
                        if (!p.TryParse(infodata))
                            return;
                        data.Get(p.num,
                            new AsyncCBHandler(delegate (object AsyncState, object retdata)
                            {
                                ConnContext context = (ConnContext)AsyncState;
                                FlyData_SnapShot p1 = (FlyData_SnapShot)retdata;
                                CurrObjSys.PushCallFunctionEx(
                                    context.from,
                                    context.srcid,
                                    ID,
                                    context.magic,
                                    SNAPSHOT_OBJ_INTERFACE.CALL_GET_SNAPSHOT,
                                    (p1 == null) ? null : p1.ToBytes());
                            }), new ConnContext(from, srcid, magic));
                    }
                    break;
                case SNAPSHOT_OBJ_INTERFACE.CALL_SET_SNAPSHOT:
                    {
                        FlyData_SnapShot p = new FlyData_SnapShot();
                        if (!p.TryParse(infodata))
                            return;
                        data.Set(p);
                    }
                    break;
                case SNAPSHOT_OBJ_INTERFACE.CALL_DEL_SNAPSHOT:
                    {
                        SNAPSHOT_OBJ_INTERFACE.Pack_Int p = new SNAPSHOT_OBJ_INTERFACE.Pack_Int();
                        if (!p.TryParse(infodata))
                            return;
                        data.Del(p.num);
                    }
                    break;
                case SNAPSHOT_OBJ_INTERFACE.CALL_GET_SNAPSHOT_LIST:
                    {
                        data.GetList(
                            new AsyncCBHandler(delegate (object AsyncState, object retdata)
                            {
                                ConnContext context = (ConnContext)AsyncState;
                                SNAPSHOT_OBJ_INTERFACE.Pack_IntList p = new SNAPSHOT_OBJ_INTERFACE.Pack_IntList();
                                p.list = (List<int>)retdata;

                                CurrObjSys.PushCallFunctionEx(
                                    context.from,
                                    context.srcid,
                                    ID,
                                    context.magic,
                                    SNAPSHOT_OBJ_INTERFACE.CALL_GET_SNAPSHOT_LIST,
                                    p.ToBytes());
                            }), new ConnContext(from, srcid, magic));
                    }
                    break;
            }
        }

    }
}