Ejemplo n.º 1
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            m_Core.ready_udp_handler = (bool bTrust) =>
            {
                /**
                bTrust값이 false인 경우 모바일모드이거나 udp수신이 안정적이지 않은 경우입니다
                어쨋든 ready상태이므로 조금 불안정하긴 하지만 udp패킷송수신이 가능하며 서버에서 지속적으로 상태를
                체크하여 자동 관리함에 따라 일시적으로 손실되어도 신경쓸필요 없습니다(자동 홀펀칭)
                */
                Console.WriteLine("ReadyUdp trust {0}", bTrust);
            };
        }
Ejemplo n.º 2
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            m_Core.ready_udp_handler = (bool bTrust) =>
            {
                /**
                 * bTrust값이 false인 경우 모바일모드이거나 udp수신이 안정적이지 않은 경우입니다
                 * 어쨋든 ready상태이므로 조금 불안정하긴 하지만 udp패킷송수신이 가능하며 서버에서 지속적으로 상태를
                 * 체크하여 자동 관리함에 따라 일시적으로 손실되어도 신경쓸필요 없습니다(자동 홀펀칭)
                 */
                Console.WriteLine("ReadyUdp trust {0}", bTrust);
            };
        }
Ejemplo n.º 3
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            // 그룹 이벤트
            m_Core.group_join_handler = (bool bJoin, ZNet.RemoteID groupID, ZNet.RemoteID memberID, int memberCount) =>
            {
                if (bJoin)
                    Console.WriteLine(string.Format("Group Join : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
                else
                    Console.WriteLine(string.Format("Group Out  : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
            };

            // 메세지 처리
            stub.Chat = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                Console.WriteLine(string.Format("recv : {0}", msg));
                return true;
            };
        }
Ejemplo n.º 4
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };

            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            m_Core.recovery_start_handler = () =>
            {
                Console.WriteLine("Recovery Connection Start...");
            };

            m_Core.recovery_end_handler = () =>
            {
                Console.WriteLine("Recovery Connection Complete.");
            };

            m_Core.server_connect_result_handler = (bool isConnectSuccess) =>
            {
                if (isConnectSuccess)
                {
                    Console.WriteLine("Connected!");
                    Program.DisplayHelpCommand();
                }
                else
                {
                    Console.WriteLine("Connect Fail!");
                }
            };

            m_Core.server_limit_handler = () =>
            {
                Console.WriteLine("Limit connection from server");
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 5
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);


            // 반자동으로 서버이동 처리하기 : 선택된 서버의 주소 정보를 받아 직접적으로 서버 주소를 넣어 이동하기
            stub.reponse_move_to_server = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, bool result, ZNet.NetAddress addr) =>
            {
                if (result)
                {
                    Console.WriteLine("Manual move server to : {0}:{1}", addr.m_ip, addr.m_port);

                    /**
                     * address를 넣어 직접적인 서버이동 요청 (MoveToServer로 서버이동시 처리되는 과정)
                     * - 서버 내부적으로 암호화된 128비트 인증키를 발급하여 목표 서버로 이동시점에 인증키 검증하여 완료처리
                     * - 모든 과정은 자동으로 진행되며 예외상황으로 서버이동이 실패하는 경우 move_fail_handler 이벤트가 발생합니다
                     */
                    m_Core.MoveToServer(addr);
                }
                else
                {
                    Console.WriteLine("Manual move server fail");
                }
                return(true);
            };

            // MoveToServer에서 서버타입을 넣어 전자동으로 서버이동을 시도한경우의 실패 이벤트
            m_Core.move_fail_handler = () =>
            {
                Console.WriteLine("Auto move server fail!");
            };

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("서버입장성공 [{0}:{1}] - 서버이동으로 입장한경우[{2}]", info.addr.m_ip, info.addr.m_port, info.moved);
            };

            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("서버퇴장성공 [{0}:{1}] - 서버이동으로 입장한경우[{2}]", info.addr.m_ip, info.addr.m_port, info.moved);
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 6
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };

            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            m_Core.recovery_start_handler = () =>
            {
                Console.WriteLine("Recovery Connection Start...");
            };

            m_Core.recovery_end_handler = () =>
            {
                Console.WriteLine("Recovery Connection Complete.");
            };

            m_Core.server_connect_result_handler = (bool isConnectSuccess) =>
            {
                if (isConnectSuccess)
                {
                    Console.WriteLine("Connected!");
                    Program.DisplayHelpCommand();
                }
                else
                {
                    Console.WriteLine("Connect Fail!");
                }
            };

            m_Core.server_limit_handler = () =>
            {
                Console.WriteLine("Limit connection from server");
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 7
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);


            // 반자동으로 서버이동 처리하기 : 선택된 서버의 주소 정보를 받아 직접적으로 서버 주소를 넣어 이동하기
            stub.reponse_move_to_server = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, bool result, ZNet.NetAddress addr) =>
            {
                if (result)
                {
                    Console.WriteLine("Manual move server to : {0}:{1}", addr.m_ip, addr.m_port);

                    /**
                    address를 넣어 직접적인 서버이동 요청 (MoveToServer로 서버이동시 처리되는 과정)
                    - 서버 내부적으로 암호화된 128비트 인증키를 발급하여 목표 서버로 이동시점에 인증키 검증하여 완료처리
                    - 모든 과정은 자동으로 진행되며 예외상황으로 서버이동이 실패하는 경우 move_fail_handler 이벤트가 발생합니다
                    */
                    m_Core.MoveToServer(addr);
                }
                else
                {
                    Console.WriteLine("Manual move server fail");
                }
                return true;
            };

            // MoveToServer에서 서버타입을 넣어 전자동으로 서버이동을 시도한경우의 실패 이벤트
            m_Core.move_fail_handler = () =>
            {
                Console.WriteLine("Auto move server fail!");
            };

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("서버입장성공 [{0}:{1}] - 서버이동으로 입장한경우[{2}]", info.addr.m_ip, info.addr.m_port, info.moved);
            };

            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("서버퇴장성공 [{0}:{1}] - 서버이동으로 입장한경우[{2}]", info.addr.m_ip, info.addr.m_port, info.moved);
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 8
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };
        }
Ejemplo n.º 9
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };
        }
Ejemplo n.º 10
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            // 그룹 이벤트
            m_Core.group_join_handler = (bool bJoin, ZNet.RemoteID groupID, ZNet.RemoteID memberID, int memberCount) =>
            {
                if (bJoin)
                {
                    Console.WriteLine(string.Format("Group Join : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
                }
                else
                {
                    Console.WriteLine(string.Format("Group Out  : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
                }
            };

            // 메세지 처리
            stub.Chat = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                Console.WriteLine(string.Format("recv : {0}", msg));
                return(true);
            };
        }
Ejemplo n.º 11
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);


            stub.Chat = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                Console.WriteLine(string.Format("recv : {0}", msg));
                return(true);
            };

            stub.notify_lobby_list = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Dictionary <ZNet.RemoteID, ZNet.MasterInfo> lobby_list) =>
            {
                lobbys = lobby_list;
                foreach (var obj in lobby_list)
                {
                    Console.WriteLine(string.Format("lobby : {0}", obj.Value.m_Description));
                }
                return(true);
            };


            // 서버이동 시도의 실패 이벤트 처리
            m_Core.move_fail_handler = () =>
            {
                Console.WriteLine("Auto move server fail!");
            };

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                if (info.moved)
                {
                    // 서버이동이 성공한 시점 : 위치를 목표했던 서버로 설정
                    server_now = server_tag;
                    Console.WriteLine("서버이동성공 [{0}:{1}] {2}", info.addr.m_ip, info.addr.m_port, server_now);
                }
                else
                {
                    // 최초 입장의 성공시점 : 위치를 로그인 서버로 설정
                    server_now = CasualCommon.Server.Login;
                    Console.WriteLine("서버입장성공 {0}", server_now);
                }
                Console.WriteLine("({0}) {1}", this.server_now, HelpCommand(this.server_now));
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                if (info.moved)
                {
                    Console.WriteLine("서버이동을 위해 퇴장, 이동할서버 [{0}:{1}]", info.addr.m_ip, info.addr.m_port);
                }
                else
                {
                    Console.WriteLine("서버퇴장성공");
                }
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 12
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);


            stub.Chat = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                Console.WriteLine(string.Format("recv : {0}", msg));
                return true;
            };

            stub.notify_lobby_list = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Dictionary<ZNet.RemoteID, ZNet.MasterInfo> lobby_list) =>
            {
                lobbys = lobby_list;
                foreach (var obj in lobby_list)
                {
                    Console.WriteLine(string.Format("lobby : {0}", obj.Value.m_Description));
                }
                return true;
            };


            // 서버이동 시도의 실패 이벤트 처리
            m_Core.move_fail_handler = () =>
            {
                Console.WriteLine("Auto move server fail!");
            };

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                if (info.moved)
                {
                    // 서버이동이 성공한 시점 : 위치를 목표했던 서버로 설정
                    server_now = server_tag;
                    Console.WriteLine("서버이동성공 [{0}:{1}] {2}", info.addr.m_ip, info.addr.m_port, server_now);
                }
                else
                {
                    // 최초 입장의 성공시점 : 위치를 로그인 서버로 설정
                    server_now = CasualCommon.Server.Login;
                    Console.WriteLine("서버입장성공 {0}", server_now);
                }
                Console.WriteLine("({0}) {1}", this.server_now, HelpCommand(this.server_now));
            };
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                if (info.moved)
                    Console.WriteLine("서버이동을 위해 퇴장, 이동할서버 [{0}:{1}]", info.addr.m_ip, info.addr.m_port);
                else
                    Console.WriteLine("서버퇴장성공");
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 13
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };

            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            m_Core.recovery_start_handler = () =>
            {
                Console.WriteLine("Recovery Connection Start...");
            };

            m_Core.recovery_end_handler = () =>
            {
                Console.WriteLine("Recovery Connection Complete.");
            };

            m_Core.server_connect_result_handler = (bool isConnectSuccess) =>
            {
                if (isConnectSuccess)
                {
                    Console.WriteLine("Connected!");
                    Program.DisplayHelpCommand();
                }
                else
                {
                    Console.WriteLine("Connect Fail!");
                }
            };

            m_Core.server_limit_handler = () =>
            {
                Console.WriteLine("Limit connection from server");
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };

            m_Core.group_join_handler = (bool bJoin, ZNet.RemoteID groupID, ZNet.RemoteID memberID, int memberCount) =>
            {
                if (bJoin)
                    Console.WriteLine(string.Format("Group Join : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
                else
                    Console.WriteLine(string.Format("Group Out  : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
            };
        }
Ejemplo n.º 14
0
        public NetManager()
        {
            core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            core.Attach(proxy, stub);


            // 서버로의 접속시도 결과 처리
            core.server_connect_result_handler = (bool isConnectSuccess) =>
            {
                if (isConnectSuccess)
                {
                    OutMsg("connect ok");
                }
                else
                {
                    OutMsg("connect fail");
                    if (JoinFailedHandler != null)
                    {
                        JoinFailedHandler();
                    }
                }
            };


            // 서버에 접속성공 이후 실제 입장성공 시점
            core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                OutMsg("join server = {0}:{1}", info.addr.addr, info.addr.port);

                proxy.cs_login(ZNet.RemoteID.Remote_Server, ZNet.CPackOption.Basic, "홍길동");
                if (JoinHandler != null)
                {
                    JoinHandler();
                }
            };


            // 서버에서 퇴장됨
            core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                OutMsg("leave server {0}:{1}", info.addr.addr, info.addr.port);
                if (LeaveHandler != null)
                {
                    LeaveHandler();
                }
            };

            core.message_handler = (ZNet.ResultInfo result) =>
            {
                if (InternalHandler != null)
                {
                    InternalHandler(result.msg);
                }
            };


            // 로그인 성공 패킷 처리
            stub.sc_login_ok = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, NetCommon.CUser user_data) =>
            {
                OutMsg("server login complete.  my username = {0}, userID = {1}", user_data.username, user_data.userID);
                return(true);
            };
        }
Ejemplo n.º 15
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);


            // 서버가 보낸 로그인인증 결과패킷을 처리합니다
            stub.reponse_Login = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, bool bResult) =>
            {
                Console.WriteLine("로그인 인증 결과" + bResult);
                return(true);
            };

            // 서버로부터 받은 메세지
            stub.Chat = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string txt) =>
            {
                Console.WriteLine(txt);
                return(true);
            };



            // 서버이동 시도에 대한 실패 이벤트
            m_Core.move_fail_handler = () =>
            {
                Console.WriteLine("서버이동 처리가 실패하였습니다.");
            };

            // 서버로의 입장이 성공한 이벤트 처리
            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                if (info.moved)
                {
                    // 서버이동이 성공한 시점 : 위치를 목표했던 서버로 설정
                    server_now = server_tag;
                    Console.WriteLine("서버이동성공 [{0}:{1}] {2}", info.addr.m_ip, info.addr.m_port, server_now);
                }
                else
                {
                    // 최초 입장의 성공시점 : 위치를 로그인 서버로 설정
                    server_now = UnityCommon.Server.Login;
                    Console.WriteLine("서버입장성공 {0}", server_now);

                    // 최초 로그인 DB인증 시도 요청
                    proxy.request_Login(ZNet.RemoteID.Remote_Server, ZNet.CPackOption.Basic, "철수", "abcd");
                }
            };

            // 서버로의 퇴장이 처리된 이벤트 처리
            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                if (info.moved)
                {
                    Console.WriteLine("서버이동을 위해 퇴장, 이동할서버 [{0}:{1}]", info.addr.m_ip, info.addr.m_port);
                }
                else
                {
                    Console.WriteLine("서버퇴장성공");
                }


                // 어떤 서버에서 퇴장하든 재접속시 최초접속과 구분하기 위하여 로그인 서버로 세팅해둡니다
                server_now = UnityCommon.Server.Login;
            };


            // 예외 상황에 대한 정보 출력 이벤트
            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };
        }
Ejemplo n.º 16
0
        public CClient()
        {
            m_Core = new ZNet.CoreClientNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            m_Core.server_join_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("JoinOK");
            };

            m_Core.server_leave_handler = (ZNet.ConnectionInfo info) =>
            {
                Console.WriteLine("Leave");
            };

            m_Core.recovery_start_handler = () =>
            {
                Console.WriteLine("Recovery Connection Start...");
            };

            m_Core.recovery_end_handler = () =>
            {
                Console.WriteLine("Recovery Connection Complete.");
            };

            m_Core.server_connect_result_handler = (bool isConnectSuccess) =>
            {
                if (isConnectSuccess)
                {
                    Console.WriteLine("Connected!");
                    Program.DisplayHelpCommand();
                }
                else
                {
                    Console.WriteLine("Connect Fail!");
                }
            };

            m_Core.server_limit_handler = () =>
            {
                Console.WriteLine("Limit connection from server");
            };

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Console.WriteLine(str_msg);
            };

            m_Core.group_join_handler = (bool bJoin, ZNet.RemoteID groupID, ZNet.RemoteID memberID, int memberCount) =>
            {
                if (bJoin)
                {
                    Console.WriteLine(string.Format("Group Join : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
                }
                else
                {
                    Console.WriteLine(string.Format("Group Out  : groupID {0}, memberID {1}, membercount {2}", groupID, memberID, memberCount));
                }
            };
        }