// 서버이동시 동기화할 유저 데이터 구성 static public void ServerMoveStart(CasualCommonSvr.CUser rc, out ZNet.ArrByte buffer) { ZNet.CMessage msg = new ZNet.CMessage(); msg.Write(rc.data.userID); msg.Write(rc.data.info); msg.Write(rc.data.temp); buffer = msg.m_array; }
// 서버이동 완료시 동기화할 유저 데이터 복구 static public void ServerMoveComplete(ZNet.ArrByte buffer, out CasualCommonSvr.CUser data) { CasualCommonSvr.CUser rc = new CasualCommonSvr.CUser(); ZNet.CMessage msg = new ZNet.CMessage(); msg.m_array = buffer; msg.Read(out rc.data.userID); msg.Read(out rc.data.info); msg.Read(out rc.data.temp); data = rc; }
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); } }; }
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); } }; }