2017-12-08 4 views
0

私はXamarin Forms(PCL)アプリケーションのチャットを行う必要があります。私はソケットのためのNuGetパッケージSocketIoClientDotNetを使用しています。Xamarin - ソケットIOの問題

最初は接続できませんでした。インターネット上の多くの研究の後、私はGithubの上this open issueを見つけたので、私は図書館だけでなく、すべての依存関係を格下げ:

  • EngineIOClient.Net V0.9.22
  • SocketIOClientDotNet V0.9.13
  • WebSocket4Net V0.14.1.0

接続がうまくいくように見えましたが、新しい問題が発生しました。接続が非常に不安定で、その原因を何かテストするのが難しいです。

共通コード:

ISocketIOインタフェース:それは私のコードは非常に簡単です...それは非常に迷惑なんだ、一度それがすべてでは接続しないで、

を複数回接続することができ、一度

public interface ISocketIO 
{ 
    void Connect(string url); 
    void On(string eventString, Action<object> action); 
} 

MsgServiceクラス:

readonly string EVENT_CONNECT = "connect"; 
public MsgService(ISocketIO socket) 
{ 
    Socket = socket; 

    if (Socket != null) 
    { 
     Socket.On(EVENT_CONNECT,() => 
     { 
      (code here...) 
     }); 
    } 
} 

public void Connect() 
{ 
    if (Socket != null) 
    { 
     Socket.Connect("chat_url_here"); 
    } 
} 

のAppクラス:

public partial class App : Application 
{ 
    public static MsgService MsgService; 

    public App(ISocketIO socket) 
    { 
     InitializeComponent(); 

     Language = Language.FRENCH; 
     MsgService = new MsgService(socket); 
     MsgService.Connect(); 
     MainPage = new NavigationPage(new MainPage()); 
    } 

    ... 
} 

(Android版と同じ)のiOSコード:

クラスSocketIO

[assembly: Xamarin.Forms.Dependency(typeof(SocketIO))] 
namespace MeetYou.iOS 
{ 
    public class SocketIO : ISocketIO 
    { 
     Socket _socket; 

     public void Connect(string url) 
     { 
      IO.Options opt = new IO.Options 
      { 
       Path = "path_here" 
      }; 
      _socket = IO.Socket(url, opt); 
      _socket.Connect(); 
     } 
    } 
} 

AppDelegate:

[Register("AppDelegate")] 
public class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 
{ 
    public override bool FinishedLaunching(UIApplication uiApplication, NSDictionary launchOptions) 
    { 
     Xamarin.Forms.Forms.Init(); 
     LoadApplication(new App(new SocketIO())); 

     return base.FinishedLaunching(uiApplication, launchOptions); 
    } 
} 

多分私はこのプラグインを使用することができる他のプラグインが存在する可能性があります。

答えて

1

この行を使わずに実行しましたか?

私は

_socket = IO.Socket("wss://" + HostUrl + "/"); 
を使用してのみ、自分のアプリケーションでは、私の例を動作させるために管理
_socket.Connect();