2016-04-06 110 views
0

目前,我使用WCF爲我的項目做網絡。但是,我想切換到一些網絡庫,例如Lidgren Network。從WCF切換到網絡庫

由於它是WCF,它使用接口,可以發送&接收數據和一個方法,並且Lidgren網絡有點低級,你需要建立和發送你的數據包,這不是問題。

問題是,我沒有任何想法,我只能用一種方法發送和接收數據,就像使用WCF一樣。

比方說,我得到了一些客戶端代碼與WCF:

void SomeCode() 
{ 
    var status = wcfChannel.CheckUserId(id); 
    if (status) 
    { 
     // true 
     // do something 
    } 
    else 
    { 
     // false 
     // do something 
    } 
} 

而且隨着lidgren網絡將是:

void SomeCode() 
{ 
    var packet = new packet(...); 
    packet.Write(id); 
    var status = send2Server(packet); 
    if (status) 
    { 
     // true 
     // do something 
    } 
    else 
    { 
     // false 
     // do something 
    } 
} 

所以,這send2Server「應該以某種方式實施。由於它只能在一個循環中接收數據包(?),所以我沒有任何想法。 好吧,我可以在SomeCode的類中有一些變量,並且接收數據包的客戶端網絡接收循環會在SomeCode的類中更改這些變量。此外,還需要添加一些延遲,並獲取這些變量以供進一步使用。 但是,應該有更好的方法來實現這一點。

+0

這更好的辦法通常是SOAP(WCF),REST(網絡API /'HttpClient')或其他一些協議和相應的庫。爲什麼你想避免WCF? – Mitch

+0

那麼,主要是因爲WCF不適用於Mono。 – slicy

+0

Mono支持大多數WCF,請參閱http://www.mono-project.com/docs/web/wcf/ – Mitch

回答

0

好吧,我只注意到Lidgren網絡支持同步:

// create, write data to packet and send it 
var packet = new packet(...); 
packet.Write(id); 
server.send2Server(packet); 

// this will block until a message arrives 
server.MessageReceivedEvent.WaitOne(); 

// msg is now received 
var msg = server.ReadMessage(); 
// process received packet below