public HostMsg(ILog _log)
        {
            log = _log;

            sender   = new HostSender(_log);
            db       = new DbStore(_log, sender);
            receiver = new MsgReceiver(_log);
        }
        public ClientConnect(ILog _log)
        {
            receiver = new MsgReceiver(_log);
            socket   = new WebSocketSharp.WebSocket(PortHost, "msg");

            sender = new ClientSender(_log, socket);
            db     = new DbStore(_log, sender);
            ///////////////////////////////////////////////////////////////////////
            //
            socket.OnOpen += (se, e) =>
            {
                //////sender.Send(
                //////    new Msg[]{
                //////        new Msg() { Data = typeof(mpUser), },
                //////        new Msg() { DataAction = DataAction.DB_ADD,
                //////                    Data = new mpUser() { Username = "******", Password = "******", Fullname = "Nguyễn Văn Thịnh" } },
                //////        new Msg() { DataAction = DataAction.DB_ADD,
                //////                    Data = new mpUser() { Username = "******", Password = "******", Fullname = "Nguyễn Cam Tu" }
                //////     }
                //////});
                //if (OnMessage != null) OnMessage(MsgConnectEvent.OPEN, null);
            };
            socket.OnMessage += (se, e) =>
            {
                //////////////////////////////////////////
                // REGISTRY SOCKET ID
                if (socket.ID == 0 && e.IsBinary)
                {
                    try
                    {
                        long id = BitConverter.ToInt64(e.RawData, 0);
                        if (id > 0)
                        {
                            socket.ID = id;
                        }
                    }
                    catch { }
                    return;
                }

                //////////////////////////////////////////
                // REGISTRY SOCKET ID
                if (e.IsBinary)
                {
                    receiver.Receive(e.RawData);
                }
            };
            socket.OnError += (se, e) =>
            {
                if (OnMessage != null)
                {
                    OnMessage(MsgConnectEvent.ERROR, null);
                }
            };
            socket.OnClose += (se, e) =>
            {
                if (OnMessage != null)
                {
                    OnMessage(MsgConnectEvent.CLOSE, null);
                }
            };
        }