예제 #1
0
        // 연결되었다면 token값 할당. 아니라면 token == null
        public int ConnectToLogin(string id, string pw, out string token)
        {
            // todo
            // id, pw를 로그인서버로 검증받아서 token을 받는다.
            // 결과로 온 연결 실패 값에 따라 다른 명령 처리할 것.
            byte[] buffer   = new byte[1024];
            int    datasize = 0;
            int    result   = 0;

            token = null;

            CruMessage msg = new CruMessage(CruNetworkProtocol.MSG_TYPE.LOGIN_REQUEST, new object[2] {
                (string)id, (string)pw
            });

            // 로그인 요청할 데이터 세팅
            datasize = _messageTransfer.SingleMsgToSendData(msg, buffer, 0, buffer.Length);
            //byte[] buffer = _messageTransfer.DatasToByte(CruNetworkProtocol.MSG_TYPE.LOGIN_REQUEST, datas);

            // 로그인 서버 포트로 연결할 것
            Socket client = Connect("localhost", 8080);

            if (client == null)
            {
                return(-1);
            }

            // 로그인 정보 전달.
            client.Send(buffer, 0, datasize, SocketFlags.None);
            Array.Clear(buffer, 0, buffer.Length);
            datasize = client.Receive(buffer, 0, buffer.Length, SocketFlags.None);

            CruMessage[] receivemsg = _messageTransfer.ReceiveByteToMsgs(buffer, datasize);

            result = (short)receivemsg[0].Datas[0];

            if (result == 0)
            {
                token = (string)receivemsg[0].Datas[1];
            }

            return(result);
        }
예제 #2
0
        // 일단 한 번에 여러 명령이 올 수 있다는 가정하에 작성.
        // Receive 받고, 함수를 통해 정보를 다른 곳으로 보내줘야한다.
        // Receive된 정보를 바꾸는 걸 비동기화로 바꾸면 좋을 듯.
        // Receive된 정보를 해당 쓰레드 말고 중앙으로 줘서 처리할 수 있지만, 그러면 중앙에서 모든 Client에서 온 정보를 처리해야하기에 각각 Thread에서 처리해주는게 더 빠르다.
        public bool Receive()
        {
            CruMessage[] temp;
            try
            {
                _receiveDataSize = _client.Receive(_receiveBuffer, 1024, SocketFlags.None);

                if (_receiveDataSize == 0)
                {
                    throw new SocketException();
                }

                // temp = _transfer.ByteToMsgs(_receiveBuffer, 0, _receiveDataSize);
                temp = _transfer.ReceiveByteToMsgs(_receiveBuffer, _receiveDataSize);
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);

                if (TerminateThread() == true)
                {
                    if (disconnectEvent != null)
                    {
                        disconnectEvent(_clientNum);
                    }
                }

                return(false);
            }
            catch (ObjectDisposedException e)
            {
                Console.WriteLine(e);

                if (TerminateThread() == true)
                {
                    if (disconnectEvent != null)
                    {
                        disconnectEvent(_clientNum);
                    }
                }

                return(false);
            }

            receiveCompleteCommonEvent(temp, _clientNum);

            return(true);
        }