/// <summary> /// Attempts to connects to the server. /// </summary> /// <param name="host">The server address.</param> /// <param name="port">The server port.</param> /// <param name="approvalMessage">The initial message to send to the server when making the connection. This can /// be utilized by the server to provide additional information for determining whether or not to accept the connection. /// Or, can be null to send nothing.</param> /// <returns> /// True if the connection attempt was successfully started. Does not mean that the connection was established, but /// just that it can be attempted. Will return false if a connection is already established or being established. /// </returns> public bool Connect(string host, int port, BitStream approvalMessage = null) { if (_local.ConnectionsCount > 0) return false; NetConnection conn; if (approvalMessage != null && approvalMessage.LengthBits > 0) { // Connect with approval message var netOutMsg = SocketHelper.GetNetOutgoingMessage(_local, approvalMessage.LengthBytes); approvalMessage.CopyTo(netOutMsg); conn = _local.Connect(host, port, netOutMsg); } else { // Connect without approval message conn = _local.Connect(host, port); } // Check if connection successful if (conn == null) { Debug.Fail("conn is null. Why?"); return false; } // Store the remote connection as an IPSocket _remote = IPSocket.Create(conn); return true; }
/// <summary> /// Sends data to the other end of the connection. /// </summary> /// <param name="data">Data to send.</param> /// <param name="deliveryMethod">The method to use to deliver the message. This determines how reliability, ordering, /// and sequencing will be handled.</param> /// <param name="sequenceChannel">The sequence channel to use to deliver the message. Only valid when /// <paramref name="deliveryMethod"/> is not equal to <see cref="NetDeliveryMethod.Unreliable"/> or /// <see cref="NetDeliveryMethod.ReliableUnordered"/>. Must also be a value greater than or equal to 0 and /// less than <see cref="NetConstants.NetChannelsPerDeliveryMethod"/>.</param> /// <returns> /// True if the <paramref name="data"/> was successfully enqueued for sending; otherwise false. /// </returns> /// <exception cref="NetException"><paramref name="deliveryMethod"/> equals <see cref="NetDeliveryMethod.Unreliable"/> /// or <see cref="NetDeliveryMethod.ReliableUnordered"/> and <paramref name="sequenceChannel"/> is non-zero.</exception> /// <exception cref="NetException"><paramref name="sequenceChannel"/> is less than 0 or greater than or equal to /// <see cref="NetConstants.NetChannelsPerDeliveryMethod"/>.</exception> /// <exception cref="NetException"><paramref name="deliveryMethod"/> equals <see cref="NetDeliveryMethod.Unknown"/>.</exception> public bool Send(BitStream data, NetDeliveryMethod deliveryMethod, int sequenceChannel = 0) { if (data == null || data.Length == 0) return false; var msg = SocketHelper.GetNetOutgoingMessage(_conn.Peer, data.LengthBytes); data.CopyTo(msg); var ret = _conn.SendMessage(msg, deliveryMethod, sequenceChannel); return ret == NetSendResult.Sent || ret == NetSendResult.Queued; }