Exemplo n.º 1
0
        private static void GameInfoMessageHandle(Protocol.MinuteFrameworkProtocol.Header header, byte[] msg)
        {
            switch ((Protocol.MinuteFrameworkProtocol.GameInfoType)header.optNumber)
            {
            case Protocol.MinuteFrameworkProtocol.GameInfoType.UserInfo:
                if (Connections.getInstance().ServerMode)
                {
                    return;                                           // 서버는 이것을 처리하지 않는다.
                }
                UserInfos ui   = UserInfos.getInstance();
                User      user = Protocol.MinuteFrameworkProtocol.ParseUserPacket(msg, 0, msg.Length);

                // 없으면 등록하고 이미 존재하면 값을 교체한다.
                if (!ui.users.ContainsKey(user.Nickname))
                {
                    ui.users.TryAdd(user.Nickname, user);
                }
                else
                {
                    ui.users[user.Nickname].UpdateData(user);
                }


                break;

            default: break;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 메세지를 수신하라고 알립니다. 해당 메세지는 동기식으로 수신됩니다.
        /// 수신된 데이터는 헤더와 내용으로 분리됩니다.
        /// </summary>
        /// <param name="target">통신 대상을 의미합니다.</param>
        /// <param name="header">헤더가 저장될 변수를 말합니다.</param>
        /// <returns>메세지의 본문을 의미합니다.</returns>
        public static byte[] Socket_MessageReceiveSync(CommunicateTarget target, out Protocol.MinuteFrameworkProtocol.Header header)
        {
            int index = 0;

            byte[] packet;

            target.msgReadedLength = 0;

            // Header를 받는 부분
            while (target.msgReadedLength < Protocol.MinuteFrameworkProtocol.HEADER_SIZE)
            {
                target.msgReadedLength += target.socket.Receive(
                    target.msgHeaderHolder,
                    target.msgReadedLength,
                    Protocol.MinuteFrameworkProtocol.HEADER_SIZE - target.msgReadedLength,
                    0);
            }

            header = Protocol.MinuteFrameworkProtocol.ParseHeader(ref target.msgHeaderHolder);

            // packet에 대한 내용을 기록하기
            packet = new byte[header.size];

            while (index < header.size)
            {
                index += target.socket.Receive(packet, index, (int)header.size - index, 0);
            }

            return(packet);
        }
Exemplo n.º 3
0
        // 시스템 메세지 분류
        private static void GameSystemMessageHandle(Protocol.MinuteFrameworkProtocol.Header header, byte[] msg)
        {
            switch ((Protocol.MinuteFrameworkProtocol.SystemMessageType)header.optNumber)
            {
            case Protocol.MinuteFrameworkProtocol.SystemMessageType.GameOver:
                SettingManager.IsPlaying = false;
                Connections.getInstance().Dispose();
                SettingManager.customEndingHandler(Protocol.MinuteFrameworkProtocol.ParseEndGamePacket(msg, 0, msg.Length));
                Environment.Exit(0);
                break;

            case Protocol.MinuteFrameworkProtocol.SystemMessageType.GameStart:
                SettingManager.IsPlaying = true;
                break;

            default: break;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 미닛 프레임워크 내장 메세지를 처리하는 방법을 정의합니다.
        /// </summary>
        /// <param name="header">들어온 메세지의 헤더를 의미합니다.</param>
        /// <param name="msg">들어온 메세지의 본문을 의미합니다.</param>
        internal static void MinuteFrameworkMsgHandle(Protocol.MinuteFrameworkProtocol.Header header, byte[] msg)
        {
            if (header.isFrameworkMessage == 0)
            {
                SettingManager.customMessageHandleDelegate(header, msg);
                return;
            }

            switch ((Protocol.MinuteFrameworkProtocol.TypeNumber)header.typeNumber)
            {
            case Protocol.MinuteFrameworkProtocol.TypeNumber.GameSystemMessage:
                GameSystemMessageHandle(header, msg);
                break;

            case Protocol.MinuteFrameworkProtocol.TypeNumber.GameInfo:
                GameInfoMessageHandle(header, msg);
                break;

            default: break;
            }
        }