// 접속하기 private void Button_Click(object sender, RoutedEventArgs e) { string address = textBoxIP.Text; if (checkBoxLocalHostIP.IsChecked == true) { address = "127.0.0.1"; } IsNetworkThreadStopRead = false; if (checkBoxLocalStopRecv.IsChecked == true) { IsNetworkThreadStopRead = true; } int port = Convert.ToInt32(textBoxPort.Text); if (Network.Connect(address, port)) { labelConnState.Content = string.Format("{0}. 서버에 접속 중", DateTime.Now); ClientState = CLIENT_STATE.CONNECTED; } else { labelConnState.Content = string.Format("{0}. 서버에 접속 실패", DateTime.Now); } }
/// <summary> /// 1. 연결이 끊겼을 때 /// 2. 다른 서버로 이동할 때 /// </summary> /// <param name="address"></param> /// <param name="port"></param> public void ReConnect(string address, int port) { CLIENT_STATE state = _client.State; if (_client != null) { _client.Dispose(); } _client.ClientSocket = null; _ip = address; _port = port; // 상태에 따른 Network 재연결 처리. switch (state) { case CLIENT_STATE.LOGIN: break; case CLIENT_STATE.LOBI: break; case CLIENT_STATE.PLAYING: break; } }
// 접속 끊기 private void Button_Click_2(object sender, RoutedEventArgs e) { DevLog.Write($"서버 접속 끊기", LOG_LEVEL.INFO); ClientState = CLIENT_STATE.NONE; SetDisconnectd(); Network.Close(); }
public void SetDisconnectd() { ClientState = CLIENT_STATE.NONE; SendPacketQueue.Clear(); //ClearUIRoomOut(); //labelStatus.Text = "서버 접속이 끊어짐"; }
// called when we make a new client public Client(Socket sock) { m_socket = sock; m_socket.Blocking = false; m_state = CLIENT_STATE.HANDHAKE; m_buffer = new List<byte>(); m_isOnline = true; m_waitingForPing = false; }
// 서버에 접속 private void button2_Click(object sender, EventArgs e) { string address = textBoxIP.Text; if (checkBoxLocalHostIP.Checked) { address = "127.0.0.1"; } int port = Convert.ToInt32(textBoxPort.Text); if (Network.Connect(address, port)) { labelConnState.Text = string.Format("{0}. 서버에 접속 중", DateTime.Now); ClientState = CLIENT_STATE.CONNECTED; } else { labelConnState.Text = string.Format("{0}. 서버에 접속 실패", DateTime.Now); } }
// 접속하기 private void Button_Click(object sender, RoutedEventArgs e) { string address = textBoxIP.Text; if (checkBoxLocalHostIP.IsChecked == true) { address = "127.0.0.1"; } int port = Convert.ToInt32(textBoxPort.Text); DevLog.Write($"서버에 접속 시도: ip:{address}, port:{port}", LOG_LEVEL.INFO); if (Network.Connect(address, port)) { labelConnState.Content = string.Format("{0}. 서버에 접속 중", DateTime.Now); ClientState = CLIENT_STATE.CONNECTED; } else { labelConnState.Content = string.Format("{0}. 서버에 접속 실패", DateTime.Now); } }
// 접속 끊기 private void Button_Click_2(object sender, RoutedEventArgs e) { ClientState = CLIENT_STATE.NONE; SetDisconnectd(); Network.Close(); }
void PacketProcess(PacketData packet) { switch ((PACKETID)packet.PacketID) { case PACKETID.RES_LOGIN: { var resData = MessagePackSerializer.Deserialize <PKTResLogin>(packet.BodyData); if (resData.Result == (short)ERROR_CODE.NONE) { ClientState = CLIENT_STATE.LOGIN; PrintLog("로그인 성공"); } else { PrintLog(string.Format("로그인 실패: {0} {1}", resData.Result, ((ERROR_CODE)resData.Result).ToString())); } } break; case PACKETID.RES_ROOM_ENTER: { var resData = MessagePackSerializer.Deserialize <PKTResRoomEnter>(packet.BodyData); if (resData.Result == (short)ERROR_CODE.NONE) { ClientState = CLIENT_STATE.ROOM; PrintLog("방 입장 성공"); } else { PrintLog(string.Format("방입장 실패: {0} {1}", resData.Result, ((ERROR_CODE)resData.Result).ToString())); } } break; case PACKETID.NTF_ROOM_USER_LIST: { var ntfData = MessagePackSerializer.Deserialize <PKTNtfRoomUserList>(packet.BodyData); foreach (var user in ntfData.UserIDList) { listBoxRoomUserList.Items.Add(user); } } break; case PACKETID.NTF_ROOM_NEW_USER: { var ntfData = MessagePackSerializer.Deserialize <PKTNtfRoomNewUser>(packet.BodyData); listBoxRoomUserList.Items.Add(ntfData.UserID); } break; case PACKETID.RES_ROOM_LEAVE: { var resData = MessagePackSerializer.Deserialize <PKTResRoomLeave>(packet.BodyData); if (resData.Result == (short)ERROR_CODE.NONE) { listBoxRoomUserList.Items.Remove(textBoxID.Text); ClientState = CLIENT_STATE.LOGIN; PrintLog("방 나가기 성공"); } else { PrintLog(string.Format("방 나가기 실패: {0} {1}", resData.Result, ((ERROR_CODE)resData.Result).ToString())); } } break; case PACKETID.NTF_ROOM_LEAVE_USER: { var ntfData = MessagePackSerializer.Deserialize <PKTNtfRoomLeaveUser>(packet.BodyData); listBoxRoomUserList.Items.Remove(ntfData.UserID); } break; case PACKETID.NTF_ROOM_CHAT: { textBoxSendChat.Text = ""; var ntfData = MessagePackSerializer.Deserialize <PKTNtfRoomChat>(packet.BodyData); listBoxChat.Items.Add($"[{ntfData.UserID}]: {ntfData.ChatMessage}"); } break; } }
public ClientStateEventArgs(NekoIOLabsConnectedClient sender, CLIENT_STATE state) { _state = state; }
void sendAcceptPacket() { scPacket pck = new scPacket(PACKET_TYPE.S_ACCEPT); m_state = CLIENT_STATE.ONLINE; sendPacket(pck); }
void handlePacket(scPacket pck) { switch ((PACKET_TYPE)pck.getPacketType()) { case PACKET_TYPE.C_HANDSHAKE: if (m_state == CLIENT_STATE.HANDHAKE) { Console.WriteLine("got handshake"); sendAcceptPacket(); m_state = CLIENT_STATE.ONLINE; m_latency = 0; m_sendTime = unixtime.getCurrentTime(); } else { // kick the client for sending wrong packets! kick("Handshake recieved from client, but it is already online!"); } break; case PACKET_TYPE.C_GET_ONLINE_CLIENTS: if (m_state == CLIENT_STATE.ONLINE) { Console.WriteLine("got GET_ONLINE_CLIENTS packet!"); sendOnlineSockets(); } else { kick("got packet GET_ONLINE_CLIENTS, but client is not online!!"); } break; case PACKET_TYPE.C_UPDATE_SOCKET_STATE: if (m_state == CLIENT_STATE.ONLINE) { Console.WriteLine("got UPDATE_SOCKET_STATE packet!"); short sockId = pck.readShort(); byte state = pck.readByte(); if (Program.getRoot().setRelayState(sockId, state)) { Console.WriteLine("updated socket {0} to state {1}", sockId, state); updateSocket(sockId, state); sendSockUpdateToAll(sockId, state); } else { Console.WriteLine("failed updated socket {0} to state {1}", sockId, state); } } else { kick("got packet UPDATE_SOCKET_STATE, but client is not online!!"); } break; case PACKET_TYPE.C_SOCKET_POWER_UPDATE: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet C_SOCKET_POWER_UPDATE but client is not online!"); return; } short socketid = pck.readShort(); int watt = pck.readLong(); watt = watt < 0 ? 0 : watt; Console.WriteLine("C_SOCKET_POWER_UPDATE watt{0}, sockid{1}", watt, socketid); updateSocketPowerUsage(socketid, watt); sendWattUsageUpdate(socketid, watt); break; case PACKET_TYPE.C_REQUEST_SOCKET_INFO: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet C_REQUEST_POWER_UPDATE but client is not online"); return; } short sockid = pck.readShort(); sendSocketPowerInfo(sockid); Console.WriteLine("got packet C_REQUEST_SOCKET_UPDATE sockid {0}", sockid); break; case PACKET_TYPE.SC_PING: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet SC_PING, but client is not online!"); return; } string msg = pck.readString(); if (msg != m_message) { kick("got ping packet, but the strings are not equal!"); return; } m_latency = unixtime.getDifferenceMilisecond(m_packetSend, DateTime.Now); m_sendTime = unixtime.getCurrentTime(); m_waitingForPing = false; Console.WriteLine("got ping packet latency {0} ms", m_latency); break; case PACKET_TYPE.SC_SEND_XML: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet SC_SEND_XML, but client is not online!"); return; } string xml = pck.readString(); Program.getRoot().saveXML(xml); // send the xml file to all clients // its the same packet, so just send it Program.getRoot().sendToAll(pck); Console.WriteLine("got SC_SEND_XML lenght {0}", xml.Length); break; case PACKET_TYPE.C_GET_XML: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet C_GET_XML, but client is not online!"); return; } xml = Program.getRoot().getXML(); scPacket packet = new scPacket(PACKET_TYPE.SC_SEND_XML); packet.writeString(xml); sendPacket(packet); Console.WriteLine("got C_GET_XML"); break; case PACKET_TYPE.SC_SEND_PICTURE: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet SC_SEND_PICTURE, but client is not online!"); return; } string name = pck.readString(); int dataLen = pck.readLong(); byte[] data = new byte[dataLen]; for (int i = 0; i < dataLen; i++) data[i] = pck.readByte(); Program.getRoot().setPicture(name, data); // send this packet to all clients Program.getRoot().sendToAll(pck); Console.WriteLine("got packet SC_SEND_PICTURE name[{0}] = byte[{1}]", name, dataLen); break; case PACKET_TYPE.C_GET_PICTURE: if (m_state != CLIENT_STATE.ONLINE) { kick("got packet SC_SEND_PICTURE, but client is not online!"); return; } name = pck.readString(); data = Program.getRoot().getPicture(name); packet = new scPacket(PACKET_TYPE.SC_SEND_PICTURE); packet.writeString(name); if (data == null) { packet.writeLong(0); } else { packet.writeLong(data.Length); Console.WriteLine("data lenght {0}", data.Length); if (data.Length > 0) { for (int i = 0; i < data.Length; i++) packet.writeByte(data[i]); } } sendPacket(packet); Console.WriteLine("got C_GET_PICTURE name = {0}", name); break; default: Console.WriteLine("unknown packet recieved"); break; } }
// 서버 접속 끊기 private void button3_Click(object sender, EventArgs e) { ClientState = CLIENT_STATE.NONE; SetDisconnectd(); Network.Close(); }