예제 #1
0
        // 접속하기
        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);
            }
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        // 접속 끊기
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            DevLog.Write($"서버 접속 끊기", LOG_LEVEL.INFO);

            ClientState = CLIENT_STATE.NONE;
            SetDisconnectd();
            Network.Close();
        }
예제 #4
0
        public void SetDisconnectd()
        {
            ClientState = CLIENT_STATE.NONE;

            SendPacketQueue.Clear();

            //ClearUIRoomOut();
            //labelStatus.Text = "서버 접속이 끊어짐";
        }
예제 #5
0
 // 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);
            }
        }
예제 #7
0
        // 접속하기
        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);
            }
        }
예제 #8
0
 // 접속 끊기
 private void Button_Click_2(object sender, RoutedEventArgs e)
 {
     ClientState = CLIENT_STATE.NONE;
     SetDisconnectd();
     Network.Close();
 }
예제 #9
0
        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;
 }
예제 #11
0
 void sendAcceptPacket()
 {
     scPacket pck = new scPacket(PACKET_TYPE.S_ACCEPT);
     m_state = CLIENT_STATE.ONLINE;
     sendPacket(pck);
 }
예제 #12
0
        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();
 }