void OnMessage(FreeNet.Packet packet) { // ex) PROTOCOL_ID protocol = (PROTOCOL_ID)packet.PopProtocolId(); //Console.WriteLine("------------------------------------------------------"); //Console.WriteLine("protocol id " + protocol); switch (protocol) { case PROTOCOL_ID.ECHO_REQ: { string text = packet.PopString(); Console.WriteLine(string.Format("text {0}", text)); var response = FreeNet.Packet.Create((short)PROTOCOL_ID.ECHO_ACK); response.Push(text); packet.Owner.Send(response); } break; default: { Console.WriteLine("Unknown protocol id " + protocol); } break; } }
bool OnSystemPacket(FreeNet.Packet packet) { var session = packet.Owner; // active close를 위한 코딩. // 서버에서 종료하라고 연락이 왔는지 체크한다. // 만약 종료신호가 맞다면 disconnect를 호출하여 받은쪽에서 먼저 종료 요청을 보낸다. switch (packet.ProtocolId) { // 이 처리는 꼭 해줘야 한다. case FreeNet.NetworkDefine.SYS_NTF_CONNECTED: Console.WriteLine($"SYS_NTF_CONNECTED: {session.UniqueId}"); var user = new GameUser(session); UserList.Add(session.UniqueId, user); return(true); // 이 처리는 꼭 해줘야 한다. case FreeNet.NetworkDefine.SYS_NTF_CLOSED: Console.WriteLine($"SYS_NTF_CLOSED: {session.UniqueId}"); //RefNetworkService.OnSessionClosed(session); UserList.Remove(session.UniqueId); return(true); case FreeNet.NetworkDefine.SYS_START_HEARTBEAT: var notifyPkt = new HeartBeatStartNtfPacket(); notifyPkt.IntervalSec = ServerOpt.ClientHeartBeatIntervalSec; var pakcetData = notifyPkt.ToPacket(); session.Send(new ArraySegment <byte>(pakcetData, 0, pakcetData.Length)); return(true); } return(false); }
bool OnSystemPacket(FreeNet.Packet packet) { var session = packet.Owner; // active close를 위한 코딩. // 서버에서 종료하라고 연락이 왔는지 체크한다. // 만약 종료신호가 맞다면 disconnect를 호출하여 받은쪽에서 먼저 종료 요청을 보낸다. switch (packet.ProtocolId) { // 이 처리는 꼭 해줘야 한다. case FreeNet.NetworkDefine.SYS_NTF_CONNECTED: Console.WriteLine("SYS_NTF_CONNECTED : " + session.UniqueId); var user = new GameUser(session); UserList.Add(session.UniqueId, user); return(true); // 이 처리는 꼭 해줘야 한다. case FreeNet.NetworkDefine.SYS_NTF_CLOSED: Console.WriteLine("SYS_NTF_CLOSED : " + session.UniqueId); //RefNetworkService.OnSessionClosed(session); UserList.Remove(session.UniqueId); return(true); case FreeNet.NetworkDefine.SYS_START_HEARTBEAT: // 순서대로 파싱해야 하므로 프로토콜 아이디는 버린다. packet.PopProtocolId(); // 전송 인터벌. byte interval = packet.PopByte(); session.StartHeartbeat(interval); return(true); case FreeNet.NetworkDefine.SYS_UPDATE_HEARTBEAT: Console.WriteLine("heartbeat : " + DateTime.Now); session.LatestHeartbeatTime = DateTime.Now.Ticks; return(true); } return(false); }
void OnMessage(FreeNet.Packet packet) { // ex) PROTOCOL_ID protocol = (PROTOCOL_ID)packet.ProtocolId; //Console.WriteLine("------------------------------------------------------"); //Console.WriteLine("protocol id " + protocol); switch (protocol) { case PROTOCOL_ID.ECHO_REQ: { var requestPkt = new EchoPacket(); requestPkt.Decode(packet.BodyData); Console.WriteLine(string.Format("text {0}", requestPkt.Data)); var responsePkt = new EchoPacket(); var packetData = responsePkt.ToPacket(PROTOCOL_ID.ECHO_ACK, packet.BodyData); packet.Owner.Send(new ArraySegment <byte>(packetData, 0, packetData.Length)); } break; case PROTOCOL_ID.HEARTBEAT_UPDATE_NOTIFY: { Console.WriteLine($"heartbeat: {DateTime.Now}"); packet.Owner.LatestHeartbeatTime = (UInt64)DateTime.Now.Ticks; } break; default: { if (OnSystemPacket(packet) == false) { Console.WriteLine("Unknown protocol id " + protocol); } } break; } }