Beispiel #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);
            };
        }
Beispiel #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);
            };
        }
Beispiel #3
0
        public MasterServer()
        {
            // 생성자에 true 입력 -> 마스터 서버 Core생성
            m_Core = new ZNet.CoreServerNet(true);

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

            m_Core.Attach(proxy, stub);

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

            // 마스터 서버에서만 발생되는 이벤트 처리 : 마스터 클라이언트 서버 입장 시점
            m_Core.master_server_join_handler = (ZNet.RemoteID remote, string description, int type, ZNet.NetAddress addr) =>
            {
                Console.WriteLine(string.Format("마스터 Client Join remoteID({0}) {1} type({2})", remote, description, type));
            };

            // 마스터 서버에서의 접속해제 이벤트 -> 마스터 클라이언트의 퇴장
            m_Core.client_disconnect_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine(string.Format("마스터 Client Leave remoteID({0})", remote));
            };
        }
Beispiel #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.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;
            };
        }
Beispiel #5
0
        public MasterServer()
        {
            // 생성자에 true 입력 -> 마스터 서버 Core생성
            m_Core = new ZNet.CoreServerNet(true);

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

            m_Core.Attach(proxy, stub);

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

            // 마스터 서버에서만 발생되는 이벤트 처리 : 마스터 클라이언트 서버 입장 시점
            m_Core.master_server_join_hanlder = (ZNet.RemoteID remote, string description, int type, ZNet.NetAddress addr) =>
            {
                Console.WriteLine(string.Format("마스터 Client Join remoteID({0}) {1} type({2})", remote, description, type));
            };

            // 마스터 서버에서의 접속해제 이벤트 -> 마스터 클라이언트의 퇴장
            m_Core.client_disconnect_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine(string.Format("마스터 Client Leave remoteID({0})", remote));
            };
        }
Beispiel #6
0
        public bool CreateServer()
        {
            try
            {
                var  cfg     = new RootConfig();
                bool bResult = Setup(cfg, m_Config, logFactory: new Log4NetLogFactory());
                if (bResult == false)
                {
                    Console.WriteLine("server config error");
                    return(false);
                }

                Console.WriteLine("MaxWork : " + cfg.MaxWorkingThreads + ", MinWork : " + cfg.MinWorkingThreads);
                Console.WriteLine("MaxIoThr: " + cfg.MaxCompletionPortThreads + ", MinIoThr: " + cfg.MinCompletionPortThreads);

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

                proxyGame = new RmiGame.Proxy();
                stubGame  = new RmiGame.Stub();

                net.Attach(proxy, stub);
                net.Attach(proxyGame, stubGame);
                PacketHandler();
            }
            catch (Exception e)
            {
                Console.WriteLine("CreateServer Exception: " + e);
                return(false);
            }
            return(true);
        }
Beispiel #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);
            };
        }
Beispiel #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");
            };

            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);
            };
        }
Beispiel #9
0
        public UdoServer()
        {
            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            // 받은 프로토콜 옵션 그대로 돌려준다 : pkOption을 그대로 사용함
            stub.request_Udp = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                if (pkOption.m_protocol == ZNet.Protocol8.Protocol_Udp)
                {
                    Console.WriteLine("Remote[{0}] msg(udp) : {1}", remote, msg);
                }
                else
                {
                    Console.WriteLine("Remote[{0}] msg(tcp) : {1}", remote, msg);
                }

                proxy.reponse_Udp(remote, pkOption, msg);
                return(true);
            };

            // udp ready 이벤트
            m_Core.ready_udp_handler = (ZNet.RemoteID remote, bool bTrust) =>
            {
                Console.WriteLine("ready udp remote {0}   trust {1}", remote, bTrust);
            };


            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };

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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };
        }
Beispiel #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.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);
            };
        }
Beispiel #11
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);
            };
        }
Beispiel #12
0
        public Server(Form1 f)
        {
            form = f;

            net = new ZNet.CoreServerNet();

            proxy = new Rmi.Proxy();
            stub  = new Rmi.Stub();
            net.Attach(proxy, stub);

            InitStub();
        }
Beispiel #13
0
        public UdoServer()
        {
            proxy = new Rmi.Proxy();
            stub = new Rmi.Stub();

            m_Core.Attach(proxy, stub);

            // 받은 프로토콜 옵션 그대로 돌려준다 : pkOption을 그대로 사용함
            stub.request_Udp = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                if (pkOption.m_protocol == ZNet.Protocol8.Protocol_Udp)
                    Console.WriteLine("Remote[{0}] msg(udp) : {1}", remote, msg);
                else
                    Console.WriteLine("Remote[{0}] msg(tcp) : {1}", remote, msg);

                proxy.reponse_Udp(remote, pkOption, msg);
                return true;
            };

            // udp ready 이벤트
            m_Core.ready_udp_handler = (ZNet.RemoteID remote, bool bTrust) =>
            {
                Console.WriteLine("ready udp remote {0}   trust {1}", remote, bTrust);
            };


            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };

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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };
        }
Beispiel #14
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");
            };
        }
Beispiel #15
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");
            };
        }
Beispiel #16
0
        public void OnStart()
        {
            NewCore();

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

            m_Core.Attach(proxy, stub);

            m_Core.message_handler = (ZNet.ResultInfo result) =>
            {
                string str_msg = "Msg : ";
                str_msg += result.msg;
                Log.logger.Info(str_msg);
            };
            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Log.logger.Error(str_msg);
            };


            ZNet.StartOption param;
            BeforeStart(out param);


            ZNet.ResultInfo outResult = new ZNet.ResultInfo();
            if (m_Core.Start(param, outResult))
            {
                Log.logger.InfoFormat("{0} start ok.", this.name);
            }
            else
            {
                Log.logger.ErrorFormat("{0} Start error : {1}", this.name, outResult.msg);
            }


            AfterStart();
        }
Beispiel #17
0
        public SampleServer()
        {
            m_Core = new ZNet.CoreServerNet();

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

            m_Core.Attach(proxy, stub);

            stub.request_message = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, RemoteClass.CUserClass testClass, Dictionary<Int32, Int32> dic_test, string msg) =>
            {
                Console.WriteLine("Remote[{0}] msg : {1}", remote, msg);
                proxy.reponse_message(remote, ZNet.CPackOption.Basic, testClass, dic_test, msg);
                return true;
            };

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };

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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };
        }
Beispiel #18
0
        public SampleServer()
        {
            m_Core = new ZNet.CoreServerNet();

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

            m_Core.Attach(proxy, stub);

            stub.request_message = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, RemoteClass.CUserClass testClass, Dictionary <Int32, Int32> dic_test, string msg) =>
            {
                Console.WriteLine("Remote[{0}] msg : {1}", remote, msg);
                proxy.reponse_message(remote, ZNet.CPackOption.Basic, testClass, dic_test, msg);
                return(true);
            };

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };

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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };
        }
Beispiel #19
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);
            };
        }
Beispiel #20
0
        public SampleServer()
        {
            m_Core = new ZNet.CoreServerNet();

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

            m_Core.Attach(proxy, stub);

            stub.request_message = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, RemoteClass.CUserClass testClass, Dictionary <Int32, Int32> dic_test, string msg) =>
            {
                Console.WriteLine("Remote[{0}] msg : {1}", remote, msg);
                proxy.reponse_message(remote, ZNet.CPackOption.Basic, testClass, dic_test, msg);
                return(true);
            };

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };


            // 주기적으로 처리할 내용 : m_UpdateTimeMs 에서 설정한 시간마다 콜백됩니다
            m_Core.update_event_handler = () =>
            {
                Console.WriteLine("Server Update Event\n");
            };


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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };


            // 연결복구 관련 이벤트
            m_Core.recovery_info_handler = (ZNet.RemoteID remoteNew, ZNet.RemoteID remoteTo) =>
            {
                Console.WriteLine("Recovery try... new connection Client[{0}] to Client[{1}].\n", remoteNew, remoteTo);
            };
            m_Core.recovery_start_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine("Recovery Start Client {0}.\n", remote);
            };
            m_Core.recovery_end_handler = (ZNet.RemoteID remote, ZNet.NetAddress addrNew, bool bTimeOut) =>
            {
                if (bTimeOut)
                {
                    Console.WriteLine("Recovery TimeOUT Client {0}.\n", remote);
                }
                else
                {
                    Console.WriteLine("Recovery Complete Client {0}.  NewAddr[{1}:{2}]\n", remote, addrNew.m_ip, addrNew.m_port);
                }
            };

            // 서버 접속제한시점의 이벤트
            m_Core.limit_connection_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine("Client {0}, {1} is Leave.\n", remote, addr.m_ip, addr.m_port);
            };
        }
Beispiel #21
0
        public SampleServer()
        {
            m_Core = new ZNet.CoreServerNet();

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

            m_Core.Attach(proxy, stub);

            stub.request_message = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, RemoteClass.CUserClass testClass, Dictionary<Int32, Int32> dic_test, string msg) =>
            {
                Console.WriteLine("Remote[{0}] msg : {1}", remote, msg);
                proxy.reponse_message(remote, ZNet.CPackOption.Basic, testClass, dic_test, msg);
                return true;
            };

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };


            // 주기적으로 처리할 내용 : m_UpdateTimeMs 에서 설정한 시간마다 콜백됩니다
            m_Core.update_event_handler = () =>
            {
                Console.WriteLine("Server Update Event\n");
            };


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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };


            // 연결복구 관련 이벤트
            m_Core.recovery_info_handler = (ZNet.RemoteID remoteNew, ZNet.RemoteID remoteTo) =>
            {
                Console.WriteLine("Recovery try... new connection Client[{0}] to Client[{1}].\n", remoteNew, remoteTo);
            };
            m_Core.recovery_start_handler = (ZNet.RemoteID remote) =>
            {
                Console.WriteLine("Recovery Start Client {0}.\n", remote);
            };
            m_Core.recovery_end_handler = (ZNet.RemoteID remote, ZNet.NetAddress addrNew, bool bTimeOut) =>
            {
                if (bTimeOut)
                    Console.WriteLine("Recovery TimeOUT Client {0}.\n", remote);
                else
                    Console.WriteLine("Recovery Complete Client {0}.  NewAddr[{1}:{2}]\n", remote, addrNew.m_ip, addrNew.m_port);
            };

            // 서버 접속제한시점의 이벤트
            m_Core.limit_connection_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine("Client {0}, {1} is Leave.\n", remote, addr.m_ip, addr.m_port);
            };
        }
Beispiel #22
0
        public GrpServer()
        {
            this.GroupID = ZNet.RemoteID.Remote_None;

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return true;
            };

            // 그룹 관리 처리하기 예제
            stub.GroupTestCommand = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string cmd) =>
            {
                switch(cmd)
                {
                    case "/make":   // 그룹 생성 또는 합류처리
                        if (this.GroupID == ZNet.RemoteID.Remote_None)
                        {
                            if (this.m_Core.CreateGroup(out this.GroupID, remote))
                            {
                                Console.WriteLine("그룹생성완료 groupID[{0}] remote[{1}] members[1]", this.GroupID, remote);
                            }
                            else
                            {
                                Console.WriteLine("그룹생성오류");
                            }
                        }
                        else
                        {
                            int Members;
                            if (this.m_Core.JoinGroup(this.GroupID, remote, out Members))
                            {
                                Console.WriteLine("그룹합류완료 groupID[{0}] remote[{1}] members[{2}]", this.GroupID, remote, Members);
                            }
                        }
                        break;

                    case "/destroy":
                        // 그룹파괴 시도하기 : group_destroy_handler를 통해 결과 통보
                        this.m_Core.DestroyGroup(this.GroupID);
                        break;

                    case "/leave":
                        // 그룹탈퇴 시도하기 : group_memberout_handler를 통해 결과 통보
                        this.m_Core.OutGroup(this.GroupID, remote);
                        break;

                    case "/msg":
                        // 그룹 전체 메세지 보내기 : remoteID에 그룹아이디(this.GroupID)를 넣는것으로 ok
                        proxy.Chat(this.GroupID, ZNet.CPackOption.Basic, "Group test message.");
                        break;
                }
                return true;
            };

            // 그룹 관련 이벤트 처리
            m_Core.group_memberout_handler = (ZNet.RemoteID groupID, ZNet.RemoteID memberID, int Members) =>
            {
                Console.WriteLine("GroupOut,   groupID {0}  remote {1}  members {2}\n", groupID, memberID, Members);
            };
            m_Core.group_destroy_handler = (ZNet.RemoteID groupID) =>
            {
                Console.WriteLine("GroupDestroy,   groupID {0}\n", groupID);
                this.GroupID = ZNet.RemoteID.Remote_None;
            };


            // 기타
            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };

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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };
        }
Beispiel #23
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);
            };
        }
Beispiel #24
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);
            };
        }
Beispiel #25
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);
            };
        }
Beispiel #26
0
        static void Main(string[] args)
        {
            NetClient client = new NetClient();

            Rmi.Proxy     proxy     = new Rmi.Proxy();
            Rmi.Stub      stub      = new Rmi.Stub();
            RmiGame.Proxy proxyGame = new RmiGame.Proxy();
            RmiGame.Stub  stubGame  = new RmiGame.Stub();

            client.Attach(proxy, stub);
            client.Attach(proxyGame, stubGame);


            client.message_handler = (t, str) =>
            {
                Console.WriteLine(string.Format("{0}: {1}", t, str));
            };

            client.server_connect_result_handler = (ok) =>
            {
                Console.WriteLine("서버연결결과: " + ok);

                proxy.cs_test(RemoteID.Remote_Server, CPackOption.Basic, 1);
                proxy.cs_test(RemoteID.Remote_Server, CPackOption.Encrypt, 2);

                proxyGame.cs_num(RemoteID.Remote_Server, CPackOption.Basic, 1122);
            };

            // 서버 연결후 rmi를 이용한 서버와의 통신이 준비된 시점, 이때부터 idl파일에 정의한 패킷으로 통신해야함
            client.client_ready_handler = () =>
            {
                Console.WriteLine("클라이언트 Ready. my remoteID: " + (int)client.remoteID);
            };

            client.server_disconnect_handler = () =>
            {
                Console.WriteLine("서버와 연결종료됨");
            };

            stub.sc_test = (ECore.RemoteID remote, ECore.CPackOption pkOption, int a, bool b, string zz) =>
            {
                Console.WriteLine(string.Format("받은패킷: {0}  {1}  {2}  ({3})", a, b, zz, pkOption.m_pack_mode));
                return(true);
            };

            stubGame.sc_num = (ECore.RemoteID remote, ECore.CPackOption pkOption, int bb) =>
            {
                Console.WriteLine(string.Format("stubGame.sc_num: {0}  ({1})", bb, pkOption.m_pack_mode));

                //// 예외발생test
                //string a = "aa";
                //int.Parse(a);

                return(true);
            };

            string hostname = "localhost";
            int    portnum  = 22000;

            Console.WriteLine("서버와 연결대기중.\n연결cmd '/c': " + hostname + "/" + portnum);


            Console.Write("\n> ");

            var  ret         = ReadLineAsync();
            bool run_program = true;

            while (run_program)
            {
                if (ret.IsCompleted)
                {
                    switch (ret.Result)
                    {
                    case "/c":
                        Console.WriteLine("서버와 연결중...");
                        if (client.Connect(hostname, portnum) == false)
                        {
                            Console.WriteLine("기존연결이 아직종료되지 않았습니다. 기존연결을 먼저 종료해야 새로운연결이 가능합니다.");
                        }
                        break;

                    case "/q":
                        if (client.Destroy() == false)
                        {
                            Console.WriteLine("서버와 연결중이 아닙니다");
                        }
                        //if (client.isClientLive)
                        //    client.Destroy();    // 소켓파괴
                        //else
                        //    Console.WriteLine("서버와 통신중이 아닙니다");

                        //run_program = false;    // 종료하자
                        break;

                    default:
                        break;
                    }

                    if (run_program)
                    {
                        ret = ReadLineAsync();
                    }
                }

                client.Update();
                System.Threading.Thread.Sleep(1);
            }
        }
Beispiel #27
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));
            };
        }
Beispiel #28
0
        public LobbyServer()
        {
            m_Core = new ZNet.CoreServerNet();

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return true;
            };

            // 방 만들기 : 룸 서버로 이동하기
            stub.request_make_room = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string name) =>
            {
                int server_type = (int)CasualCommon.Server.Room;

                // 아무 서버나 하나 고른다
                ZNet.MasterInfo svr;
                if (m_Core.SelectServer(server_type, out svr))
                {
                    // 이동 파라미터 구성
                    ZNet.ArrByte param_buffer;
                    CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                    param.From(CasualCommonSvr.MoveParam.ParamMove.MoveToRoom, CasualCommonSvr.MoveParam.ParamRoom.RoomMake, Guid.NewGuid(), this.svrRemoteID);
                    CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                    m_Core.ServerMoveStart(remote, svr.m_Addr, param_buffer, param.room_id);
                }
                return true;
            };

            // 방 입장하기 : 룸서버 이동
            stub.request_join_room = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID) =>
            {
                int server_type = (int)CasualCommon.Server.Room;

                ZNet.MasterInfo[] svr_array;
                m_Core.GetServerList(server_type, out svr_array);

                ZNet.MasterInfo find_server = null;
                if (roomID == Guid.Empty)
                {
                    // 방 검색
                    foreach (var one_room in RemoteRooms)
                    {
                        // 인원숫자 검사 : 입장 가능한 방
                        if (one_room.Value.users.Count < one_room.Value.max_users)
                        {
                            // 서버 검색
                            foreach (var obj in svr_array)
                            {
                                // 해당 방이 존재하는지 확인
                                if ((ZNet.RemoteID)one_room.Value.remote_svr == obj.m_remote)
                                {
                                    roomID = one_room.Value.roomID;
                                    find_server = obj;
                                    break;
                                }
                            }
                        }
                        if (find_server != null)
                            break;
                    }

                    if (find_server == null)
                    {
                        // 해당 서버 없음 : 이동 실패
                        return true;
                    }


                    // 이동 파라미터 구성
                    ZNet.ArrByte param_buffer;
                    CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                    param.From(CasualCommonSvr.MoveParam.ParamMove.MoveToRoom, CasualCommonSvr.MoveParam.ParamRoom.RoomJoin, roomID, this.svrRemoteID);
                    CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                    m_Core.ServerMoveStart(remote, find_server.m_Addr, param_buffer, roomID);
                }
                else
                {
                    // 지정된 roomID가 존재하는 룸서버를 골라서 해당 방으로 입장시켜준다
                }
                return true;
            };




            // --- 서버간 통신 패킷 ---

            // 방생성 + 입장
            stub.room_lobby_makeroom = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID, string name, int number, ZNet.RemoteID remote_svr, ZNet.RemoteID remote_lobby, Guid userID) =>
            {
                CasualCommonSvr.CRoom new_room = new CasualCommonSvr.CRoom();
                new_room.From(roomID, name, number, (int)remote_svr, (int)remote_lobby);
                new_room.users.Add(userID);
                RemoteRooms.Add(roomID, new_room);
                return true;
            };

            // 방입장
            stub.room_lobby_joinroom = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID, Guid userID) =>
            {
                CasualCommonSvr.CRoom room_join;
                if (RemoteRooms.TryGetValue(roomID, out room_join))
                {
                    room_join.users.Add(userID);
                }
                return true;
            };

            // 방퇴장
            stub.room_lobby_outroom = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID, Guid userID) =>
            {
                CasualCommonSvr.CRoom room_join;
                if (RemoteRooms.TryGetValue(roomID, out room_join))
                {
                    room_join.users.Remove(userID);
                }

                if (room_join.users.Count == 0)
                {
                    RemoteRooms.Remove(roomID);
                }
                return true;
            };




            // -- Core Event --

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                // 서버이동으로 입장한 경우
                if (move_server.Count > 0)
                {
                    CasualCommonSvr.CUser rc;
                    CasualCommonSvr.Common.ServerMoveComplete(move_server, out rc);

                    CasualCommonSvr.MoveParam param;
                    CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                    Console.WriteLine("move server complete  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                    RemoteClients.Add(remote, rc);
                }
                else
                {
                    // 일반 입장은 허용하지 않음
                    m_Core.CloseRemoteClient(remote);
                }

                Console.WriteLine("Client {0} is Join {1}:{2}. Current={3}\n", remote, addr.m_ip, addr.m_port, RemoteClients.Count);
            };
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                RemoteClients.Remove(remote);
                Console.WriteLine("Client {0} Leave. MoveServer{1}  Current={2}\n", remote, bMoveServer, RemoteClients.Count);
            };

            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    buffer = null;
                    return;
                }
                rc.data.temp = "로비서버";

                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                CasualCommonSvr.Common.ServerMoveStart(rc, out buffer);

                Console.WriteLine("move server start  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
            };

            // 파라미터 검사후 서버이동 승인 여부 결정하기
            m_Core.move_server_param_handler = (ZNet.ArrByte move_param, int count_idx) =>
            {
                CasualCommonSvr.MoveParam param;
                CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                Console.WriteLine("MoveParam_2 {0} {1} {2}", param.moveTo, param.roomJoin, param.room_id);

                // 이서버가 로비서버이므로 파라미터가 로비서버일때만 승인해준다
                if (param.moveTo == CasualCommonSvr.MoveParam.ParamMove.MoveToLobby)
                    return true;

                return false;
            };

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

            m_Core.server_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));
            };
            m_Core.server_leave_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));
            };

            m_Core.server_master_join_handler = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                this.svrRemoteID = (int)myRemoteID;
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", myRemoteID));
            };
            m_Core.server_master_leave_handler = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
                run_program = false;    // 자동 종료처리를 위해
            };

            m_Core.server_refresh_handler = (ZNet.MasterInfo master_info) =>
            {
                //Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                //    master_info.m_remote,
                //    (CasualCommon.Server)master_info.m_ServerType,
                //    master_info.m_Description,
                //    master_info.m_Clients,
                //    master_info.m_Addr.m_ip,
                //    master_info.m_Addr.m_port
                //    ));
            };
        }
Beispiel #29
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);
            };
        }
Beispiel #30
0
        public LobbyServer()
        {
            m_Core = new ZNet.CoreServerNet();

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return(true);
            };

            // 방 만들기 : 룸 서버로 이동하기
            stub.request_make_room = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string name) =>
            {
                int server_type = (int)CasualCommon.Server.Room;

                // 아무 서버나 하나 고른다
                ZNet.MasterInfo svr;
                if (m_Core.SelectServer(server_type, out svr))
                {
                    // 이동 파라미터 구성
                    ZNet.ArrByte param_buffer;
                    CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                    param.From(CasualCommonSvr.MoveParam.ParamMove.MoveToRoom, CasualCommonSvr.MoveParam.ParamRoom.RoomMake, Guid.NewGuid(), this.svrRemoteID);
                    CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                    m_Core.ServerMoveStart(remote, svr.m_Addr, param_buffer, param.room_id);
                }
                return(true);
            };

            // 방 입장하기 : 룸서버 이동
            stub.request_join_room = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID) =>
            {
                int server_type = (int)CasualCommon.Server.Room;

                ZNet.MasterInfo[] svr_array;
                m_Core.GetServerList(server_type, out svr_array);

                ZNet.MasterInfo find_server = null;
                if (roomID == Guid.Empty)
                {
                    // 방 검색
                    foreach (var one_room in RemoteRooms)
                    {
                        // 인원숫자 검사 : 입장 가능한 방
                        if (one_room.Value.users.Count < one_room.Value.max_users)
                        {
                            // 서버 검색
                            foreach (var obj in svr_array)
                            {
                                // 해당 방이 존재하는지 확인
                                if ((ZNet.RemoteID)one_room.Value.remote_svr == obj.m_remote)
                                {
                                    roomID      = one_room.Value.roomID;
                                    find_server = obj;
                                    break;
                                }
                            }
                        }
                        if (find_server != null)
                        {
                            break;
                        }
                    }

                    if (find_server == null)
                    {
                        // 해당 서버 없음 : 이동 실패
                        return(true);
                    }


                    // 이동 파라미터 구성
                    ZNet.ArrByte param_buffer;
                    CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                    param.From(CasualCommonSvr.MoveParam.ParamMove.MoveToRoom, CasualCommonSvr.MoveParam.ParamRoom.RoomJoin, roomID, this.svrRemoteID);
                    CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                    m_Core.ServerMoveStart(remote, find_server.m_Addr, param_buffer, roomID);
                }
                else
                {
                    // 지정된 roomID가 존재하는 룸서버를 골라서 해당 방으로 입장시켜준다
                }
                return(true);
            };



            // --- 서버간 통신 패킷 ---

            // 방생성 + 입장
            stub.room_lobby_makeroom = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID, string name, int number, ZNet.RemoteID remote_svr, ZNet.RemoteID remote_lobby, Guid userID) =>
            {
                CasualCommonSvr.CRoom new_room = new CasualCommonSvr.CRoom();
                new_room.From(roomID, name, number, (int)remote_svr, (int)remote_lobby);
                new_room.users.Add(userID);
                RemoteRooms.Add(roomID, new_room);
                return(true);
            };

            // 방입장
            stub.room_lobby_joinroom = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID, Guid userID) =>
            {
                CasualCommonSvr.CRoom room_join;
                if (RemoteRooms.TryGetValue(roomID, out room_join))
                {
                    room_join.users.Add(userID);
                }
                return(true);
            };

            // 방퇴장
            stub.room_lobby_outroom = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, Guid roomID, Guid userID) =>
            {
                CasualCommonSvr.CRoom room_join;
                if (RemoteRooms.TryGetValue(roomID, out room_join))
                {
                    room_join.users.Remove(userID);
                }

                if (room_join.users.Count == 0)
                {
                    RemoteRooms.Remove(roomID);
                }
                return(true);
            };



            // -- Core Event --

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                // 서버이동으로 입장한 경우
                if (move_server.Count > 0)
                {
                    CasualCommonSvr.CUser rc;
                    CasualCommonSvr.Common.ServerMoveComplete(move_server, out rc);

                    CasualCommonSvr.MoveParam param;
                    CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                    Console.WriteLine("move server complete  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                    RemoteClients.Add(remote, rc);
                }
                else
                {
                    // 일반 입장은 허용하지 않음
                    m_Core.CloseRemoteClient(remote);
                }

                Console.WriteLine("Client {0} is Join {1}:{2}. Current={3}\n", remote, addr.m_ip, addr.m_port, RemoteClients.Count);
            };
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                RemoteClients.Remove(remote);
                Console.WriteLine("Client {0} Leave. MoveServer{1}  Current={2}\n", remote, bMoveServer, RemoteClients.Count);
            };

            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    buffer = null;
                    return;
                }
                rc.data.temp = "로비서버";

                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                CasualCommonSvr.Common.ServerMoveStart(rc, out buffer);

                Console.WriteLine("move server start  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
            };

            // 파라미터 검사후 서버이동 승인 여부 결정하기
            m_Core.move_server_param_handler = (ZNet.ArrByte move_param, int count_idx) =>
            {
                CasualCommonSvr.MoveParam param;
                CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                Console.WriteLine("MoveParam_2 {0} {1} {2}", param.moveTo, param.roomJoin, param.room_id);

                // 이서버가 로비서버이므로 파라미터가 로비서버일때만 승인해준다
                if (param.moveTo == CasualCommonSvr.MoveParam.ParamMove.MoveToLobby)
                {
                    return(true);
                }

                return(false);
            };

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

            m_Core.server_join_hanlder = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));
            };
            m_Core.server_leave_hanlder = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));
            };

            m_Core.server_master_join_hanlder = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                this.svrRemoteID = (int)myRemoteID;
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", myRemoteID));
            };
            m_Core.server_master_leave_hanlder = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
                run_program = false;    // 자동 종료처리를 위해
            };

            m_Core.server_refresh_hanlder = (ZNet.MasterInfo master_info) =>
            {
                //Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                //    master_info.m_remote,
                //    (CasualCommon.Server)master_info.m_ServerType,
                //    master_info.m_Description,
                //    master_info.m_Clients,
                //    master_info.m_Addr.m_ip,
                //    master_info.m_Addr.m_port
                //    ));
            };
        }
Beispiel #31
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));
                }
            };
        }
Beispiel #32
0
        public RoomServer()
        {
            m_Core = new ZNet.CoreServerNet();

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return(true);
            };

            // 방 나가기
            stub.request_out_room = (ZNet.RemoteID remote, ZNet.CPackOption pkOption) =>
            {
                int server_type = (int)CasualCommon.Server.Lobby;

                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    return(true);
                }

                CasualCommonSvr.CRoom room_join;
                if (RemoteRooms.TryGetValue(rc.roomID, out room_join))
                {
                    ZNet.MasterInfo[] svr_array;
                    m_Core.GetServerList(server_type, out svr_array);

                    // 서버 검색
                    foreach (var obj in svr_array)
                    {
                        // 원래 방입장하기 전에 있었던 로비서버로 돌아가기 위해
                        if (obj.m_remote == (ZNet.RemoteID)room_join.remote_lobby)
                        {
                            // 이동 파라미터 구성 : 타겟을 로비서버로 (나머지 파라미터는 룸->로비 이동시에는 별 의미없음)
                            ZNet.ArrByte param_buffer;
                            CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                            param.From(CasualCommonSvr.MoveParam.ParamMove.MoveToLobby, CasualCommonSvr.MoveParam.ParamRoom.RoomNull, Guid.NewGuid(), this.svrRemoteID);
                            CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                            m_Core.ServerMoveStart(remote, obj.m_Addr, param_buffer, param.room_id);
                            return(true);
                        }
                    }
                }
                return(true);
            };



            // 파라미터 검사후 서버이동 승인 여부 결정하기
            m_Core.move_server_param_handler = (ZNet.ArrByte move_param, int count_idx) =>
            {
                CasualCommonSvr.MoveParam param;
                CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                Console.WriteLine("MoveParam_2 {0} {1} {2}", param.moveTo, param.roomJoin, param.room_id);

                if (param.moveTo == CasualCommonSvr.MoveParam.ParamMove.MoveToRoom)
                {
                    if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomMake)
                    {
                        return(true);
                    }
                    else if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomJoin)
                    {
                        // 현재 이 방의 인원숫자 + allow숫자(count_idx)를 비교하여 입장 허용 여부를 결정한다
                        CasualCommonSvr.CRoom room_join;
                        if (RemoteRooms.TryGetValue(param.room_id, out room_join))
                        {
                            //if (room_join.users.Count + count_idx < 1)
                            if (room_join.users.Count + count_idx < room_join.max_users)
                            {
                                return(true);
                            }
                        }
                    }
                }
                return(false);
            };

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                // 서버이동으로 입장한 경우
                if (move_server.Count > 0)
                {
                    CasualCommonSvr.CUser rc;
                    CasualCommonSvr.Common.ServerMoveComplete(move_server, out rc);

                    CasualCommonSvr.MoveParam param;
                    CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                    if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomMake)
                    {
                        // 방생성
                        CasualCommonSvr.CRoom new_room = new CasualCommonSvr.CRoom();
                        new_room.From(param.room_id, "방이름", 123, this.svrRemoteID, param.lobby_remote);

                        if (RemoteRooms.ContainsKey(param.room_id))
                        {
                            // 동일한 guid생성을 허용금지 : 예외처리필요
                        }

                        RemoteRooms.Add(param.room_id, new_room);

                        new_room.users.Add(rc.data.userID);

                        // 로비서버에게 방생성을 알린다
                        proxy.room_lobby_makeroom((ZNet.RemoteID)new_room.remote_lobby, ZNet.CPackOption.Basic,
                                                  new_room.roomID, new_room.name, new_room.number, (ZNet.RemoteID)new_room.remote_svr, (ZNet.RemoteID)new_room.remote_lobby, rc.data.userID);
                    }
                    else if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomJoin)
                    {
                        // 방입장
                        CasualCommonSvr.CRoom room_join;
                        if (RemoteRooms.TryGetValue(param.room_id, out room_join))
                        {
                            room_join.users.Add(rc.data.userID);
                        }
                        else
                        {
                            Console.WriteLine("move server join error!!! {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                            m_Core.CloseRemoteClient(remote);
                            return;
                        }

                        // 로비서버에게 방입장을 알린다
                        proxy.room_lobby_joinroom((ZNet.RemoteID)room_join.remote_lobby, ZNet.CPackOption.Basic, room_join.roomID, rc.data.userID);
                    }

                    rc.roomID = param.room_id;

                    Console.WriteLine("move server complete  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                    RemoteClients.Add(remote, rc);
                }
                else
                {
                    // 일반 입장은 허용하지 않음
                    m_Core.CloseRemoteClient(remote);
                }

                Console.WriteLine("Client {0} is Join {1}:{2}. Current={3}\n", remote, addr.m_ip, addr.m_port, RemoteClients.Count);
            };
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc))
                {
                    CasualCommonSvr.CRoom room_join;
                    if (RemoteRooms.TryGetValue(rc.roomID, out room_join))
                    {
                        room_join.users.Remove(rc.data.userID);
                    }

                    if (room_join.users.Count == 0)
                    {
                        RemoteRooms.Remove(rc.roomID);
                    }

                    // 로비서버에게 방퇴장을 알린다
                    proxy.room_lobby_outroom((ZNet.RemoteID)room_join.remote_lobby, ZNet.CPackOption.Basic, room_join.roomID, rc.data.userID);

                    Console.WriteLine("Client {0} Leave.\n", remote);
                }
            };

            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    buffer = null;
                    return;
                }
                rc.data.temp = "룸서버";

                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                CasualCommonSvr.Common.ServerMoveStart(rc, out buffer);

                Console.WriteLine("move server start  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
            };

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

            m_Core.server_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));
            };
            m_Core.server_leave_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));
            };

            m_Core.server_master_join_handler = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                this.svrRemoteID = (int)myRemoteID;
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", myRemoteID));
            };
            m_Core.server_master_leave_handler = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
                run_program = false;    // 자동 종료처리를 위해
            };

            m_Core.server_refresh_handler = (ZNet.MasterInfo master_info) =>
            {
                //Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                //    master_info.m_remote,
                //    (CasualCommon.Server)master_info.m_ServerType,
                //    master_info.m_Description,
                //    master_info.m_Clients,
                //    master_info.m_Addr.m_ip,
                //    master_info.m_Addr.m_port
                //    ));
            };
        }
Beispiel #33
0
        public RoomServer()
        {
            m_Core = new ZNet.CoreServerNet();

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return true;
            };

            // 방 나가기
            stub.request_out_room = (ZNet.RemoteID remote, ZNet.CPackOption pkOption) =>
            {
                int server_type = (int)CasualCommon.Server.Lobby;

                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                    return true;

                CasualCommonSvr.CRoom room_join;
                if (RemoteRooms.TryGetValue(rc.roomID, out room_join))
                {
                    ZNet.MasterInfo[] svr_array;
                    m_Core.GetServerList(server_type, out svr_array);

                    // 서버 검색
                    foreach (var obj in svr_array)
                    {
                        // 원래 방입장하기 전에 있었던 로비서버로 돌아가기 위해
                        if (obj.m_remote == (ZNet.RemoteID)room_join.remote_lobby)
                        {
                            // 이동 파라미터 구성 : 타겟을 로비서버로 (나머지 파라미터는 룸->로비 이동시에는 별 의미없음)
                            ZNet.ArrByte param_buffer;
                            CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                            param.From(CasualCommonSvr.MoveParam.ParamMove.MoveToLobby, CasualCommonSvr.MoveParam.ParamRoom.RoomNull, Guid.NewGuid(), this.svrRemoteID);
                            CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                            m_Core.ServerMoveStart(remote, obj.m_Addr, param_buffer, param.room_id);
                            return true;
                        }
                    }
                }
                return true;
            };




            // 파라미터 검사후 서버이동 승인 여부 결정하기
            m_Core.move_server_param_handler = (ZNet.ArrByte move_param, int count_idx) =>
            {
                CasualCommonSvr.MoveParam param;
                CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                Console.WriteLine("MoveParam_2 {0} {1} {2}", param.moveTo, param.roomJoin, param.room_id);

                if (param.moveTo == CasualCommonSvr.MoveParam.ParamMove.MoveToRoom)
                {
                    if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomMake)
                    {
                        return true;
                    }
                    else if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomJoin)
                    {
                        // 현재 이 방의 인원숫자 + allow숫자(count_idx)를 비교하여 입장 허용 여부를 결정한다
                        CasualCommonSvr.CRoom room_join;
                        if (RemoteRooms.TryGetValue(param.room_id, out room_join))
                        {
                            //if (room_join.users.Count + count_idx < 1)
                            if (room_join.users.Count + count_idx < room_join.max_users)
                                return true;
                        }
                    }
                }
                return false;
            };

            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                // 서버이동으로 입장한 경우
                if (move_server.Count > 0)
                {
                    CasualCommonSvr.CUser rc;
                    CasualCommonSvr.Common.ServerMoveComplete(move_server, out rc);

                    CasualCommonSvr.MoveParam param;
                    CasualCommonSvr.Common.ServerMoveParam2(move_param, out param);

                    if (param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomMake)
                    {
                        // 방생성
                        CasualCommonSvr.CRoom new_room = new CasualCommonSvr.CRoom();
                        new_room.From(param.room_id, "방이름", 123, this.svrRemoteID, param.lobby_remote);

                        if (RemoteRooms.ContainsKey(param.room_id))
                        {
                            // 동일한 guid생성을 허용금지 : 예외처리필요
                        }

                        RemoteRooms.Add(param.room_id, new_room);

                        new_room.users.Add(rc.data.userID);

                        // 로비서버에게 방생성을 알린다
                        proxy.room_lobby_makeroom((ZNet.RemoteID)new_room.remote_lobby, ZNet.CPackOption.Basic,
                            new_room.roomID, new_room.name, new_room.number, (ZNet.RemoteID)new_room.remote_svr, (ZNet.RemoteID)new_room.remote_lobby, rc.data.userID);
                    }
                    else if(param.roomJoin == CasualCommonSvr.MoveParam.ParamRoom.RoomJoin)
                    {
                        // 방입장
                        CasualCommonSvr.CRoom room_join;
                        if (RemoteRooms.TryGetValue(param.room_id, out room_join))
                        {
                            room_join.users.Add(rc.data.userID);
                        }
                        else
                        {
                            Console.WriteLine("move server join error!!! {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                            m_Core.CloseRemoteClient(remote);
                            return;
                        }

                        // 로비서버에게 방입장을 알린다
                        proxy.room_lobby_joinroom((ZNet.RemoteID)room_join.remote_lobby, ZNet.CPackOption.Basic, room_join.roomID, rc.data.userID);
                    }

                    rc.roomID = param.room_id;

                    Console.WriteLine("move server complete  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                    RemoteClients.Add(remote, rc);
                }
                else
                {
                    // 일반 입장은 허용하지 않음
                    m_Core.CloseRemoteClient(remote);
                }

                Console.WriteLine("Client {0} is Join {1}:{2}. Current={3}\n", remote, addr.m_ip, addr.m_port, RemoteClients.Count);
            };
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc))
                {
                    CasualCommonSvr.CRoom room_join;
                    if (RemoteRooms.TryGetValue(rc.roomID, out room_join))
                    {
                        room_join.users.Remove(rc.data.userID);
                    }

                    if (room_join.users.Count == 0)
                    {
                        RemoteRooms.Remove(rc.roomID);
                    }

                    // 로비서버에게 방퇴장을 알린다
                    proxy.room_lobby_outroom((ZNet.RemoteID)room_join.remote_lobby, ZNet.CPackOption.Basic, room_join.roomID, rc.data.userID);

                    Console.WriteLine("Client {0} Leave.\n", remote);
                }
            };

            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    buffer = null;
                    return;
                }
                rc.data.temp = "룸서버";

                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                CasualCommonSvr.Common.ServerMoveStart(rc, out buffer);

                Console.WriteLine("move server start  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
            };

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

            m_Core.server_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));
            };
            m_Core.server_leave_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));
            };

            m_Core.server_master_join_handler = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                this.svrRemoteID = (int)myRemoteID;
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", myRemoteID));
            };
            m_Core.server_master_leave_handler = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
                run_program = false;    // 자동 종료처리를 위해
            };

            m_Core.server_refresh_handler = (ZNet.MasterInfo master_info) =>
            {
                //Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                //    master_info.m_remote,
                //    (CasualCommon.Server)master_info.m_ServerType,
                //    master_info.m_Description,
                //    master_info.m_Clients,
                //    master_info.m_Addr.m_ip,
                //    master_info.m_Addr.m_port
                //    ));
            };
        }
Beispiel #34
0
        public LoginServer()
        {
            m_Core = new ZNet.CoreServerNet();

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return(true);
            };

            stub.request_lobby_list = (ZNet.RemoteID remote, ZNet.CPackOption pkOption) =>
            {
                proxy.notify_lobby_list(remote, ZNet.CPackOption.Basic, this.lobby_list);
                return(true);
            };



            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                // 서버이동으로 입장한 경우
                if (move_server.Count > 0)
                {
                    CasualCommonSvr.CUser rc;
                    CasualCommonSvr.Common.ServerMoveComplete(move_server, out rc);

                    Console.WriteLine("move server complete  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                    RemoteClients.Add(remote, rc);
                }
                else
                {
                    // 일반 입장
                    CasualCommonSvr.CUser rc = new CasualCommonSvr.CUser();
                    rc.data.userID = Guid.NewGuid();
                    rc.data.info   = string.Format("유저_{0}", remote);
                    rc.data.temp   = "일반입장";
                    RemoteClients.Add(remote, rc);
                }

                proxy.notify_lobby_list(remote, ZNet.CPackOption.Basic, this.lobby_list); // 입장시 로비 리스트 보냄

                Console.WriteLine("Client {0} is Join {1}:{2}. Current={3}\n", remote, addr.m_ip, addr.m_port, RemoteClients.Count);
            };
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                RemoteClients.Remove(remote);
                Console.WriteLine("Client {0} Leave. MoveServer{1}  Current={2}\n", remote, bMoveServer, RemoteClients.Count);
            };

            // 해당 서버 타입의 조건을 검사한후 응답처리
            stub.request_go_lobby = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string lobbyname) =>
            {
                // 실제 해당 서버의 검증 작업
                ZNet.MasterInfo[] svr_array;
                m_Core.GetServerList((int)CasualCommon.Server.Lobby, out svr_array);

                foreach (var obj in svr_array)
                {
                    // 지정한 로비 서버 이름 확인
                    if (lobbyname == obj.m_Description)
                    {
                        // 이동 파라미터 구성
                        ZNet.ArrByte param_buffer;
                        CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                        param.moveTo = CasualCommonSvr.MoveParam.ParamMove.MoveToLobby;
                        CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                        // 여기서 내부패킷으로 자동적으로 서버이동이 처리 된다
                        m_Core.ServerMoveStart(remote, obj.m_Addr, param_buffer, new Guid());

                        Console.WriteLine("MoveParam_1 {0} {1} {2}", param.moveTo, param.roomJoin, param.room_id);
                        return(true);
                    }
                }
                return(true);
            };

            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    buffer = null;
                    return;
                }
                rc.data.temp = "로그인서버";

                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                CasualCommonSvr.Common.ServerMoveStart(rc, out buffer);

                Console.WriteLine("move server start  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
            };

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

            m_Core.server_join_hanlder = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));

                // 입장한 시점 : 이 서버의 세부 정보는 이후 refresh_handler를 통해 들어오면 처리해야한다
            };
            m_Core.server_leave_hanlder = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));

                // 퇴장한 서버에 대한 처리
                lobby_list.Remove(remote);
            };

            m_Core.server_master_join_hanlder = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", myRemoteID));
            };
            m_Core.server_master_leave_hanlder = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
                run_program = false;    // 자동 종료처리를 위해
            };

            m_Core.server_refresh_hanlder = (ZNet.MasterInfo master_info) =>
            {
                //Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                //    master_info.m_remote,
                //    (CasualCommon.Server)master_info.m_ServerType,
                //    master_info.m_Description,
                //    master_info.m_Clients,
                //    master_info.m_Addr.m_ip,
                //    master_info.m_Addr.m_port
                //    ));

                // 로비 리스트 정보 갱신
                lobby_list.Remove(master_info.m_remote);
                if ((CasualCommon.Server)master_info.m_ServerType == CasualCommon.Server.Lobby)
                {
                    lobby_list.Add(master_info.m_remote, master_info);
                }
            };
        }
Beispiel #35
0
        public GrpServer()
        {
            this.GroupID = ZNet.RemoteID.Remote_None;

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return(true);
            };

            // 그룹 관리 처리하기 예제
            stub.GroupTestCommand = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string cmd) =>
            {
                switch (cmd)
                {
                case "/make":       // 그룹 생성 또는 합류처리
                    if (this.GroupID == ZNet.RemoteID.Remote_None)
                    {
                        if (this.m_Core.CreateGroup(out this.GroupID, remote))
                        {
                            Console.WriteLine("그룹생성완료 groupID[{0}] remote[{1}] members[1]", this.GroupID, remote);
                        }
                        else
                        {
                            Console.WriteLine("그룹생성오류");
                        }
                    }
                    else
                    {
                        int Members;
                        if (this.m_Core.JoinGroup(this.GroupID, remote, out Members))
                        {
                            Console.WriteLine("그룹합류완료 groupID[{0}] remote[{1}] members[{2}]", this.GroupID, remote, Members);
                        }
                    }
                    break;

                case "/destroy":
                    // 그룹파괴 시도하기 : group_destroy_handler를 통해 결과 통보
                    this.m_Core.DestroyGroup(this.GroupID);
                    break;

                case "/leave":
                    // 그룹탈퇴 시도하기 : group_memberout_handler를 통해 결과 통보
                    this.m_Core.OutGroup(this.GroupID, remote);
                    break;

                case "/msg":
                    // 그룹 전체 메세지 보내기 : remoteID에 그룹아이디(this.GroupID)를 넣는것으로 ok
                    proxy.Chat(this.GroupID, ZNet.CPackOption.Basic, "Group test message.");
                    break;
                }
                return(true);
            };

            // 그룹 관련 이벤트 처리
            m_Core.group_memberout_handler = (ZNet.RemoteID groupID, ZNet.RemoteID memberID, int Members) =>
            {
                Console.WriteLine("GroupOut,   groupID {0}  remote {1}  members {2}\n", groupID, memberID, Members);
            };
            m_Core.group_destroy_handler = (ZNet.RemoteID groupID) =>
            {
                Console.WriteLine("GroupDestroy,   groupID {0}\n", groupID);
                this.GroupID = ZNet.RemoteID.Remote_None;
            };


            // 기타
            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
            };

            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };

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

            m_Core.exception_handler = (Exception e) =>
            {
                string str_msg = "Exception : ";
                str_msg += e.ToString();
                Console.WriteLine(str_msg);
            };
        }
Beispiel #36
0
        public LoginServer()
        {
            m_Core = new ZNet.CoreServerNet();

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

            m_Core.Attach(proxy, stub);

            // 메세지 패킷 처리 샘플
            stub.request_message = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string msg) =>
            {
                Console.WriteLine("Remote[{0}] msg : {1}", remote, msg);
                proxy.reponse_message(remote, ZNet.CPackOption.Basic, msg);
                return true;
            };

            // 서버이동 요청 패킷 처리 : 요청 받은 서버타입중 원활한 서버를 찾아서 수동으로 접속할 수 있게 주소를 보내준다
            stub.request_move_to_server = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, int server_type) =>
            {
                ZNet.MasterInfo selectSvr;
                if (m_Core.SelectServer(server_type, out selectSvr))
                {
                    proxy.reponse_move_to_server(remote, ZNet.CPackOption.Basic, true, selectSvr.m_Addr);
                }
                else
                {
                    proxy.reponse_move_to_server(remote, ZNet.CPackOption.Basic, false, new ZNet.NetAddress());
                }
                return true;
            };

            // 클라이언트가 이 서버에 입장된 시점
            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                if (move_server.Count == 0)
                {
                    // 일반 입장
                    Console.WriteLine("Client {0} is Join {1}:{2}.\n", remote, addr.m_ip, addr.m_port);
                }
                else // 서버 이동으로 입장한 경우
                {
                    // 이동 시작한 서버에서 구성해둔 유저 데이터 버퍼를 이용해 동기화 처리한다
                    ZNet.CMessage msg = new ZNet.CMessage();
                    msg.m_array = move_server;

                    ServerP2P_Common.UserDataSync user_data;
                    msg.Read(out user_data.info);
                    msg.Read(out user_data.item_id);
                    Console.WriteLine("Client Join (move server) {0}  {1}", user_data.info, user_data.item_id);
                }
            };

            // 클라이언트가 이 서버에 퇴장하는 시점
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                Console.WriteLine("Client {0} Leave.\n", remote);
            };


            // 서버 이동 시작 시점 : 완료 이벤트는 이동 성공한 서버에서 발생
            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                ZNet.CMessage msg = new ZNet.CMessage();
                ServerP2P_Common.UserDataSync user_data;

                user_data.info = "유저 데이터 정보, DBID=1234, 로그인서버입니다";
                user_data.item_id = 12312309871234;

                msg.Write(user_data.info);
                msg.Write(user_data.item_id);

                buffer = msg.m_array;

                Console.WriteLine("move server start  {0}  {1}", user_data.info, user_data.item_id);
            };

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


            // server p2p관련 이벤트
            m_Core.server_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));
            };

            m_Core.server_leave_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));
            };

            m_Core.server_master_join_handler = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", remote));
            };

            m_Core.server_master_leave_handler = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
            };

            m_Core.server_refresh_handler = (ZNet.MasterInfo master_info) =>
            {
                Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                    master_info.m_remote,
                    (ServerP2P_Common.Server)master_info.m_ServerType,
                    master_info.m_Description,
                    master_info.m_Clients,
                    master_info.m_Addr.m_ip,
                    master_info.m_Addr.m_port
                    ));
            };
        }
Beispiel #37
0
        public LoginServer()
        {
            m_Core = new ZNet.CoreServerNet();

            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("Remote[{0}] msg : {1}", remote, msg);
                proxy.Chat(remote, ZNet.CPackOption.Basic, msg);
                return true;
            };

            stub.request_lobby_list = (ZNet.RemoteID remote, ZNet.CPackOption pkOption) =>
            {
                proxy.notify_lobby_list(remote, ZNet.CPackOption.Basic, this.lobby_list);
                return true;
            };




            m_Core.client_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr, ZNet.ArrByte move_server, ZNet.ArrByte move_param) =>
            {
                // 서버이동으로 입장한 경우
                if (move_server.Count > 0)
                {
                    CasualCommonSvr.CUser rc;
                    CasualCommonSvr.Common.ServerMoveComplete(move_server, out rc);

                    Console.WriteLine("move server complete  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
                    RemoteClients.Add(remote, rc);
                }
                else
                {
                    // 일반 입장
                    CasualCommonSvr.CUser rc = new CasualCommonSvr.CUser();
                    rc.data.userID = Guid.NewGuid();
                    rc.data.info = string.Format("유저_{0}", remote);
                    rc.data.temp = "일반입장";
                    RemoteClients.Add(remote, rc);
                }

                proxy.notify_lobby_list(remote, ZNet.CPackOption.Basic, this.lobby_list); // 입장시 로비 리스트 보냄

                Console.WriteLine("Client {0} is Join {1}:{2}. Current={3}\n", remote, addr.m_ip, addr.m_port, RemoteClients.Count);
            };
            m_Core.client_leave_handler = (ZNet.RemoteID remote, bool bMoveServer) =>
            {
                RemoteClients.Remove(remote);
                Console.WriteLine("Client {0} Leave. MoveServer{1}  Current={2}\n", remote, bMoveServer, RemoteClients.Count);
            };

            // 해당 서버 타입의 조건을 검사한후 응답처리
            stub.request_go_lobby = (ZNet.RemoteID remote, ZNet.CPackOption pkOption, string lobbyname) =>
            {
                // 실제 해당 서버의 검증 작업
                ZNet.MasterInfo[] svr_array;
                m_Core.GetServerList((int)CasualCommon.Server.Lobby, out svr_array);

                foreach (var obj in svr_array)
                {
                    // 지정한 로비 서버 이름 확인
                    if(lobbyname == obj.m_Description)
                    {
                        // 이동 파라미터 구성
                        ZNet.ArrByte param_buffer;
                        CasualCommonSvr.MoveParam param = new CasualCommonSvr.MoveParam();
                        param.moveTo = CasualCommonSvr.MoveParam.ParamMove.MoveToLobby;
                        CasualCommonSvr.Common.ServerMoveParam1(param, out param_buffer);

                        // 여기서 내부패킷으로 자동적으로 서버이동이 처리 된다
                        m_Core.ServerMoveStart(remote, obj.m_Addr, param_buffer, new Guid());

                        Console.WriteLine("MoveParam_1 {0} {1} {2}", param.moveTo, param.roomJoin, param.room_id);
                        return true;
                    }
                }
                return true;
            };

            m_Core.move_server_start_handler = (ZNet.RemoteID remote, out ZNet.ArrByte buffer) =>
            {
                CasualCommonSvr.CUser rc;
                if (RemoteClients.TryGetValue(remote, out rc) == false)
                {
                    buffer = null;
                    return;
                }
                rc.data.temp = "로그인서버";

                // 여기서는 이동할 서버로 동기화 시킬 유저 데이터를 구성하여 buffer에 넣어둔다 -> 완료서버에서 해당 데이터를 그대로 받게된다
                CasualCommonSvr.Common.ServerMoveStart(rc, out buffer);

                Console.WriteLine("move server start  {0} {1} {2}", rc.data.userID, rc.data.info, rc.data.temp);
            };

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

            m_Core.server_join_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 입장 remoteID {0}", remote));

                // 입장한 시점 : 이 서버의 세부 정보는 이후 refresh_handler를 통해 들어오면 처리해야한다
            };
            m_Core.server_leave_handler = (ZNet.RemoteID remote, ZNet.NetAddress addr) =>
            {
                //Console.WriteLine(string.Format("서버P2P맴버 퇴장 remoteID {0}", remote));

                // 퇴장한 서버에 대한 처리
                lobby_list.Remove(remote);
            };

            m_Core.server_master_join_handler = (ZNet.RemoteID remote, ZNet.RemoteID myRemoteID) =>
            {
                Console.WriteLine(string.Format("마스터서버에 입장성공 remoteID {0}", myRemoteID));
            };
            m_Core.server_master_leave_handler = () =>
            {
                Console.WriteLine(string.Format("마스터서버와 연결종료!!!"));
                run_program = false;    // 자동 종료처리를 위해
            };

            m_Core.server_refresh_handler = (ZNet.MasterInfo master_info) =>
            {
                //Console.WriteLine(string.Format("서버P2P remote:{0} type:{1}[{2}] current:{3} addr:{4}:{5}",
                //    master_info.m_remote,
                //    (CasualCommon.Server)master_info.m_ServerType,
                //    master_info.m_Description,
                //    master_info.m_Clients,
                //    master_info.m_Addr.m_ip,
                //    master_info.m_Addr.m_port
                //    ));

                // 로비 리스트 정보 갱신
                lobby_list.Remove(master_info.m_remote);
                if ((CasualCommon.Server)master_info.m_ServerType == CasualCommon.Server.Lobby)
                {
                    lobby_list.Add(master_info.m_remote, master_info);
                }
            };
        }