using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FObjBase;

namespace OBJ_FileBus
{
    public class Server_OBJProxy:FObj
    {
        Server mServer;
        public Server_OBJProxy(int objsys_idx, Server server, UInt32 id)
            : base(objsys_idx)
        {
            ID = id;
            mServer = server;
            mServer.SendMessageEvent += new Server.SendMessageEventHandler(mServer_SendMessageEvent);

        }

        public Server_OBJProxy(int objsys_idx, Server server) 
            :base(objsys_idx)
        {
            ID = FILEBUS_OBJ_INTERFACE.ID;
            mServer = server;
            mServer.SendMessageEvent += new Server.SendMessageEventHandler(mServer_SendMessageEvent);
            
        }

        void mServer_SendMessageEvent(Server.ClientInfo client, byte[] buf)
        {
            CurrObjSys.PushObjInfoEx(this, FILEBUS_OBJ_INTERFACE.PUSH_MSG, buf, client.conn, client.destid);
        }
        #region FLYOBJ 结构

        public override void ConnectNotify(IFConn from)
        {
            if (from.IsConnected == false)
                mServer.ClientRemove(new OBJ_FileBus.Server.ClientInfo() { conn = from });
        }
        public override void CallFunction(IFConn from, uint srcid, UInt32 magic, ushort funcid, byte[] infodata)
        {
            switch (funcid)
            {
                case FILEBUS_OBJ_INTERFACE.CALL_MSG:
                    {
                        byte[] retdata = null;
                        mServer.RequestService(
                            new Server.ClientInfo() { conn = from, destid = srcid },
                                        infodata, out retdata);

                        if (retdata != null)
                        {
                            CurrObjSys.PushCallFunctionEx(from, srcid, ID, magic, funcid, retdata);
                        }
                    } break;
            }
        }

        #endregion
    }
}
