/// <summary> /// Request 된 전문에 해당하는 Response 전문 생성 /// or /// 지정된 전문 생성 /// /// *** 보낼 SAEA 객체에는 Request 된 전문이 들어있음 /// </summary> /// <param name="sendEventArgs">보낼 SAEA 객체</param> /// <param name="packetName">옵션 : 특정전문 지정</param> /// <param name="userId">옵션 : 사용자 ID</param> /// <param name="message">옵션 : 메세지</param> /// <returns>MessageStream</returns> public MessageStream GetResponse(SocketAsyncEventArgs sendEventArgs, MessagePacketNameEnum packetName = MessagePacketNameEnum.EMPTY, string userId = "") { MessageStream response = null; try { /// Request 된 전문 (sendEventArgs) 에 해당하는 Response 전문 생성 if (packetName == MessagePacketNameEnum.EMPTY) { MessageReader reader = this.GetResponseHeader(sendEventArgs); response = this.GetResponseMake(sendEventArgs, reader); } else { //if (packetName == MessagePacketNameEnum.NTFTM) response = MessageNotifyTextMessage(sendEventArgs); if (packetName == MessagePacketNameEnum.ACCPT) { response = MessageAccept(); } else if (packetName == MessagePacketNameEnum.CLOSE) { response = MessageLoginDuplicated(userId); } } return(response); } catch { return(null); } }
/// <summary> /// 전문 바디 생성 /// </summary> /// <param name="sendEventArgs">보낼 SAEA 객체</param> /// <param name="reader">전문 헤더</param> /// <param name="message">바디에 추가할 메세지</param> /// <returns>MessageStream</returns> public MessageStream GetResponseMake(SocketAsyncEventArgs sendEventArgs, MessageReader reader, string message = "") { MessageStream response = null; try { /// 전문 몸체 생성 if (reader == null) { /// 헤더 없을시 ERRHD 전문 생성 response = MessageErrorHeader(); } else { MessagePacketNameEnum packetName = MessagePacketNameEnum.EMPTY; /// 전문 헤더의 PacketName 에 해당하는 응답전문 이름 파싱 if (Enum.TryParse <MessagePacketNameEnum>(reader.Header.PacketName, out packetName) == false) { packetName = MessagePacketNameEnum.EMPTY; } /// 파싱된 응답 전문 바디 생성 if (packetName == MessagePacketNameEnum.EMPTY) { response = MessageErrorHeader(); } else if (packetName == MessagePacketNameEnum.REQVI) { response = MessageRequestVersionInfo(reader); } else if (packetName == MessagePacketNameEnum.LOGIN) { response = MessageLogin(reader, sendEventArgs); } else if (packetName == MessagePacketNameEnum.LOGOT) { response = MessageLogout(reader, sendEventArgs); } else if (packetName == MessagePacketNameEnum.ALIVE) { response = MessageAlive(reader); } } } catch (Exception ex) { SocketListener.Log.ExceptionLog(ex, "전문 생성 오류"); /// 바디 생성 오류시 MMERR 전문 생성 response = MessageErrorMakeMessage(reader); } return(response); }
/// <summary> /// Client 로 전문 보내기 /// </summary> /// <param name="sendEventArgs">보낼 SAEA 객체</param> /// <param name="packetName">옵션 : 특정전문 지정</param> /// <param name="userId">옵션 : 사용자 ID</param> /// <param name="message">옵션 : 메세지</param> internal void SendMessageToClient(SocketAsyncEventArgs sendEventArgs, MessagePacketNameEnum packetName = MessagePacketNameEnum.EMPTY, string userId = "") { DataHoldingUserToken sendToken = (DataHoldingUserToken)sendEventArgs.UserToken; MessageStream response = null; /// 전문 생성 response = messageParsing.GetResponse(sendEventArgs, packetName, userId); if (response == null) { return; } /// 버퍼로 복사 int readByteAll = response.ReadAll(ref sendToken.dataToSend, this.socketListenerSettings.BufferSize); this.SendMessage(sendEventArgs); }