public async Task ConnectWebSocket(OnMessageHandler onMessageHandler, OnConnectHandler onConnectHandler = null, OnCloseHandler onCloseHandler = null) { await Task.Run(async() => { if (!Guid.TryParse(wsToken, out _)) { throw new ArgumentException("tokenの値が不正です, UUID形式で入力してください"); } sakuraioSocket = new ClientWebSocket(); try { await sakuraioSocket.ConnectAsync(new Uri("wss://api.sakura.io/ws/v1/" + wsToken), CancellationToken.None); } catch (System.Net.WebSockets.WebSocketException) { throw new WebSocketException("WebSocketの接続に失敗しました"); } // 特に指定がなければ呼ばない onConnectHandler?.Invoke(true); while (sakuraioSocket.State == WebSocketState.Open) { var buff = new ArraySegment <byte>(new byte[MessageBufferSize]); var ret = await sakuraioSocket.ReceiveAsync(buff, CancellationToken.None); if (!ret.EndOfMessage) { continue; } var frameString = (new UTF8Encoding()).GetString(buff.Take(ret.Count).ToArray()); Console.WriteLine(frameString); var cmsg = DeserializeChannelMessage(frameString); if (cmsg == null) { continue; } onMessageHandler(cmsg); } onCloseHandler?.Invoke(); }); }
public void Connect(ClientID varClientID, string ip, int tcpPort, OnConnectHandler onConnect, OnDisconnectHandler onDisconnect) { int id = (int)varClientID; if (mClientDic.ContainsKey(id)) { Client client = mClientDic[id]; mClientDic.Remove(id); client.Disconnect(); } Client c = new Client(); c.onConnect += onConnect; c.onDisconnect += onDisconnect; c.onDebug += onDebug; c.onMessage += OnMessage; c.Connect(ip, tcpPort); mClientDic.Add(id, c); }
public void SetOnConnectHandler(OnConnectHandler handler) { this.m_onConnectHandler = handler; }