2015-02-02 2 views
0

서버로 실행되는 응용 프로그램이 있으며 일부 계산에서 값을 반환합니다. 차별화 된 유니온 유형 MessageType을 만들었으므로 응용 프로그램간에 서로 다른 유형의 메시지를 전달할 수 있습니다.F # 식별 된 공용체 액세스 값

MessageTypeExchangeFrameExchangeMessage으로 구성됩니다. 내가 가진 질문은 MessageType에서 ExchangeFrame의 값에 액세스하는 방법입니다. 디자인 약자로

코드는 당신이 다음 메세지 유형에서 프레임을 추출하고 일치 (1) 패턴에 의한 교환 프레임에 액세스 할 수 있습니다, 그것은 더 나은

[<CLIMutable>] 
type ExchangeFrame = 
    { 
    FrameType: FrameType 
    Amount: double; 
    ConvertTo: Currency 
    ConvertFrom: Currency 
    } 

type MessageType = ExchangeMessage of ExchangeFrame 

let server() = 
    use context = new Context() 

    // socket to talk to clients 
    use responder = context |> Context.rep 
    "tcp://*:5555" |> Socket.bind responder 

    Console.WriteLine("Server Running") 

    while true do 
     // wait for next request from client 
     let messageReceived = responder |> Socket.recv |> decode |> deserializeJson<MessageType> 

     //Do Calculations 
     let total = doCalculations //MessageReceived.ExchangeMessage.Amount 3.0 

     // send reply back to client 
     let message = encode <| total 
     message |> Socket.send responder 

server() 
+1

'ExchangeMessage (프레임) -> .. // 프레임 무언가로 수행' –

+0

존 감사합니다.하지만 교환 프레임의 각 값에 어떻게 접근 할 수 있을지 혼란 스럽습니다. 조금 더 구체화 할 수 있습니까 –

+1

그러면'frame.Amount' 또는 무엇이든 할 수 있습니다. –

답변

1

을 설명 할 수 (2)에 점을 찍는 프레임을 추출하려면 다음과 같이 입력하십시오.

let msgType = // creation 
let (ExchangeMessage frame) = msgType 
let amount = frame.Amount 

그러나 내 의견을 참조하십시오.