/// <summary> /// Send data to another side. /// </summary> /// <param name="messageType"></param> /// <param name="bits"></param> /// <returns></returns> async Task SendBytesAsync(TransferMessageType messageType, byte[] bits) { await this.SendAsync( messageType, bits.Length, async() => { await this._socket.OutputStream.WriteAsync(bits.AsBuffer()); } ); }
/// <summary> /// /// </summary> /// <param name="messageType"></param> /// <param name="messageBody"></param> void MessageHandler(TransferMessageType messageType, object messageBody) { switch (messageType) { case TransferMessageType.WorldAnchor: CurrentState = SharingServiceState.ReadyToImportChangedAnchor; ReceiveNewAnchor((byte[])messageBody); break; case TransferMessageType.Event: CurrentState = SharingServiceState.ReadyToImportEventHandler; var rawData = System.Text.Encoding.UTF8.GetString((byte[])messageBody); var items = rawData.Split('|'); switch (items[0]) { case "SelectStock": var panel = GameObject.Find("No1Panel"); var controller = panel.GetComponentInChildren <No1PanelController>(); controller.SelectStock(items[1], items[2], items[3], Convert.ToBoolean(items[4]), items[5], items[6], items[7]); break; case "ShowNextPanel": var panel2 = GameObject.Find("No2Panel"); var controller2 = panel2.GetComponentInChildren <No2PanelController>(); controller2.ShowNextPanel(); break; } break; } CurrentState = SharingServiceState.ConnectionEstablished; //if (messageType == TransferMessageType.String) //{ // OutputDebugInfo(messageBody.ToString()); //} //else if (messageType == TransferMessageType.Buffer) //{ // ReceiveNewAnchor((byte[])messageBody); //} }
/// <summary> /// SendAsync /// </summary> /// <param name="messageType"></param> /// <param name="length"></param> /// <param name="writeBitsAsync"></param> /// <returns></returns> async Task SendAsync(TransferMessageType messageType, int length, Func <Task> writeBitsAsync) { if (this._socket == null) { throw new InvalidOperationException("Socket not connected"); } var data = BitConverter.GetBytes(length); if (BitConverter.IsLittleEndian) { Array.Reverse(data); } await this._socket.OutputStream.WriteAsync(data.AsBuffer()); await writeBitsAsync(); data = new byte[] { (byte)messageType }; await this._socket.OutputStream.WriteAsync(data.AsBuffer()); await this._socket.OutputStream.FlushAsync(); }