Example #1
0
 public static void RoomRemove(CRoom _room)
 {
     Console.WriteLine("Program RoomRemove _room:{0}", _room);
     lock (listRoom)
     {
         listRoom.Remove(_room);
     }
 }
Example #2
0
        public static void RoomCreate(CGameUser _user, string _roomName)
        {
            Console.WriteLine("Program RoomCreate _user:{0} _name:{1}", _user, _roomName);

            CRoom _room = new CRoom();

            _room.name = _roomName;
            _room.UserInsert(_user);
            _user.SetRoom(_room);
            lock (listRoom)
            {
                listRoom.Add(_room);

                //Room number 받아오는 부분에 버그가 있음...
                //1 -> 2 후에...
                //1 or 2제거된후에....
                //받아오면~~~~~ 2
                //2 2 번이된다 오류임....~~~
                //_room.number = listRoom.Count();
                _room.number = roomIdentity;
                roomIdentity++;
            }
        }
Example #3
0
        //void IPeer.ParseCode(Const<byte[]> _buffer)
        public void ParseCode(Const <byte[]> _buffer)
        {
            Console.WriteLine("======================================");
            Console.WriteLine(this + " 패킷 들어옴... 파싱하기. ParseCode");
            Console.WriteLine("======================================");
            //_packet은 함수 안에서만 유효한것임... 다른데에서는 사용안함...
            CPacket     _receive = new CPacket(_buffer.Value, this);
            LOGIN_PROTO _code    = (LOGIN_PROTO)_receive.pop_protocol_id();

            Console.WriteLine(" > _code:" + _code);

            switch (_code)
            {
            case LOGIN_PROTO.CREATE_ROOM_REQ:
            {
                Console.WriteLine("[C -> S] CREATE_ROOM_REQ");
                if (myRoom == null)
                {
                    bRoomMaster = true;         //방장이여

                    string _strRoomName = _receive.ReadString();
                    Program.RoomCreate(this, _strRoomName);
                    Console.WriteLine(" > _strRoomName:{0}", _strRoomName);

                    Console.WriteLine("[C <- S] CREATE_ROOM_OK");
                    CPacket _response = CPacket.Create((short)LOGIN_PROTO.CREATE_ROOM_OK);
                    _response.WriteInt(m_SN);
                    SendCode(_response);
                }
                else
                {
                    Console.WriteLine("[C <- S] CREATE_ROOM_FAILED");
                    SendCode(CPacket.Create((short)LOGIN_PROTO.CREATE_ROOM_FAILED));                                     //이미 접속한 방이있어
                }
            }
            break;

            case LOGIN_PROTO.ROOM_LIST_REQ:
            {
                Console.WriteLine("[C -> S] ROOM_LIST_REQ");

                CPacket _response  = CPacket.Create((short)LOGIN_PROTO.ROOM_LIST_ACK);
                int     _countRoom = Program.listRoom.Count;
                _response.WriteInt(_countRoom);

                Console.WriteLine(" > 방수량:{0}", _countRoom);
                for (int i = 0; i < _countRoom; i++)                                 // Loop with for.
                {
                    if (Program.listRoom[i] != null)
                    {
                        _response.WriteString(Program.listRoom[i].name);
                        _response.WriteInt(Program.listRoom[i].playerCount);
                        _response.WriteInt(Program.listRoom[i].playerMax);
                    }
                }
                Console.WriteLine("[C <- S] ROOM_LIST_ACK");
                SendCode(_response);
            }
            break;

            case LOGIN_PROTO.ROOM_EXIT_REQ:
            {
                Console.WriteLine("[C -> S] ROOM_EXIT_REQ");
                Program.Exit_Room(this);
                myRoom = null;
            }
            break;

            case LOGIN_PROTO.ROOM_CONNECT_REQ:
            {
                Console.WriteLine("[C -> S] ROOM_CONNECT_REQ");
                int _roomNum = _receive.ReadInt();

                if (Program.RoomConnect(this, _roomNum))
                {
                    //성공
                    CPacket _response = CPacket.Create((short)LOGIN_PROTO.ROOM_CONNECT_OK);

                    _response.WriteInt(myRoom.listGameUser.Count);
                    _response.WriteInt(m_SN);
                    for (int i = 0; i < myRoom.listGameUser.Count; ++i)
                    {
                        _response.WriteInt(myRoom.listGameUser[i].m_SN);
                    }
                    Console.WriteLine("[C <- S] ROOM_CONNECT_OK");
                    SendCode(_response);                                     //잘만들었으

                    CPacket _response2 = CPacket.Create((short)LOGIN_PROTO.ROOM_CONNECT_OTHER);
                    _response2.WriteInt(m_SN);
                    Console.WriteLine("[C <- S] ROOM_CONNECT_OTHER");
                    myRoom.BroadCast(_response2, this);
                }
                else
                {
                    //실패
                    Console.WriteLine("[C <- S] ROOM_CONNECT_FAILED");
                    SendCode(CPacket.Create((short)LOGIN_PROTO.ROOM_CONNECT_FAILED));
                }
            }
            break;

            case LOGIN_PROTO.CHAT_MSG_REQ:
            {
                Console.WriteLine("[C -> S] CHAT_MSG_REQ");
                string _strMsg = _receive.ReadString();
                Console.WriteLine(" > _strMsg:{0}", _strMsg);
                if (myRoom != null)
                {
                    CPacket _response = CPacket.Create((short)LOGIN_PROTO.CHAT_MSG_REQ);
                    _response.WriteInt(m_SN);
                    _response.WriteString(_strMsg);
                    Console.WriteLine("[C <- S] CHAT_MSG_REQ");
                    myRoom.BroadCast(_response, this);
                }
                else
                {
                    CPacket _response = CPacket.Create((short)LOGIN_PROTO.CHAT_MSG_REQ);
                    _response.WriteInt(0);
                    _response.WriteString(_strMsg);
                    Console.WriteLine("[C <- S] CHAT_MSG_REQ");
                    SendCode(_response);
                }
            }
            break;

            case LOGIN_PROTO.LOGIN_REQUEST:
            {
                Console.WriteLine("[C -> S] LOGIN_REQUEST");
                //msg.pop_string();

                UserInfo _userInfo = new UserInfo();
                _userInfo.Name = _receive.ReadString();
                _userInfo.SN   = m_SN;
                listUserInfo.Add(_userInfo);
                //Console.WriteLine(" Connect" + _userInfo.Name);

                CPacket _response1 = CPacket.Create((short)LOGIN_PROTO.LOGIN_REPLY);
                _response1.WriteInt(m_SN);
                _response1.WriteString(_userInfo.Name);
                Console.WriteLine("[C <- S] LOGIN_REPLY");
                BroadCast(_response1);


                CPacket _response = CPacket.Create((short)LOGIN_PROTO.USER_CONNECT);
                _response.WriteInt(m_SN);
                _response.WriteString(_userInfo.Name);
                Console.WriteLine("[C <- S] USER_CONNECT");
                SendCode(_response);

                for (int i = 0; i < listUserInfo.Count; i++)                                 // Loop with for.
                {
                    if (m_SN != listUserInfo[i].SN)
                    {
                        CPacket _response3 = CPacket.Create((short)LOGIN_PROTO.LOGIN_REPLY);
                        _response3.WriteInt(listUserInfo[i].SN);
                        _response3.WriteString(listUserInfo[i].Name);
                        Console.WriteLine("[C <- S] LOGIN_REPLY");
                        SendCode(_response3);
                    }
                }

                ++m_SN;
            }
            break;

            case LOGIN_PROTO.MOVING_USER_REQ:
            {
                Console.WriteLine("[C -> S] MOVING_USER_REQ");
                int   SN = _receive.ReadInt();
                float x  = _receive.ReadFloat();
                float y  = _receive.ReadFloat();
                float z  = _receive.ReadFloat();
                Console.WriteLine(" > SN:{0} x:{1} y:{2}, z:{3}", SN, x, y, z);
                Console.WriteLine("[C <- S] MOVING_USER_REQ");

                BroadCast(_receive);
            }
            break;

            case LOGIN_PROTO.MOVING_USER_ONLY:
            {
                Console.WriteLine("[C -> S] MOVING_USER_ONLY");
                int   SN = _receive.ReadInt();
                float x  = _receive.ReadFloat();
                float y  = _receive.ReadFloat();
                float z  = _receive.ReadFloat();
                Console.WriteLine(" > SN:{0} x:{1} y:{2}, z:{3}", SN, x, y, z);
                Console.WriteLine("[C <- S] MOVING_USER_ONLY");


                CPacket _response = CPacket.Create((short)LOGIN_PROTO.MOVING_USER_ONLY);
                _response.WriteInt(SN);
                _response.WriteFloat(x);
                _response.WriteFloat(y);
                _response.WriteFloat(z);

                List <CGameUser> _userList = Program.listGameUser;
                foreach (CGameUser _client in _userList)
                {
                    _client.token.SendCode(_response);
                }
            }
            break;

            case LOGIN_PROTO.ATTACK:
            {
                Console.WriteLine("[C -> S] ATTACK");
                int   SN   = _receive.ReadInt();
                byte  Type = _receive.ReadByte();
                float x    = _receive.ReadFloat();
                float y    = _receive.ReadFloat();
                float z    = _receive.ReadFloat();
                float w    = _receive.ReadFloat();
                Console.WriteLine(" > SN:{0} Type:{1} x:{2}, y:{3}, z:{4}, w:{5}", SN, Type, x, y, z, w);
                Console.WriteLine("[C <- S] ATTACK");
                BroadCast(_receive);
            }
            break;

            case LOGIN_PROTO.PTC_ECHO:
            {
                Console.WriteLine("[C -> S] PTC_ECHO");
                string _strMsg = _receive.ReadString();
                Console.WriteLine(" > _strMsg:{0}", _strMsg);

                CPacket _response = CPacket.Create((short)LOGIN_PROTO.PTS_ECHO);
                _response.WriteString(_strMsg);
                Console.WriteLine("[C <- S] PTS_ECHO");
                SendCode(_response);
            }
            break;

            default:
            {
                Console.WriteLine("[C -> S] ####(프로토콜이 지정되지 않았어요.) " + (LOGIN_PROTO)_code);
            }
            break;
            }

            //사용하고 남은 것은 해제해준다.
            //CPacket.Destroy(_packet);
        }
Example #4
0
 public CRoom myRoom = null;  //내가 접속한 방
 public void SetRoom(CRoom _myRoom)
 {
     Console.WriteLine(this + " SetRoom _myRoom:{0}", _myRoom);
     myRoom = _myRoom;
 }