protected bool Send( int connectionId, byte[] key, InternalMessage message, ChannelIndex channel, BitWriter writer, bool sendImmediately, out string error ) { MessageSecurity security = AlpacaConstant.GetSecurity( channel ); if( !WrapMessage( message, security, writer, key, out error ) ) { return false; } //_profiler.StartEvent(TickType.Send, (uint)stream.Length, channelName, AlpacaConstant.INTERNAL_MESSAGE_NAME[messageType]); DataStream s = writer.GetStream(); byte errorAsByte; if( sendImmediately ) { NetworkTransport.Send ( 0, connectionId, channel.GetIndex(), s.GetBuffer(), s.GetByteLength(), out errorAsByte); } else { NetworkTransport.QueueMessageForSending( 0, connectionId, channel.GetIndex(), s.GetBuffer(), s.GetByteLength(), out errorAsByte); } //_profiler.EndEvent(); if( (NetworkError)errorAsByte != NetworkError.Ok ) { error = $"Send {AlpacaConstant.GetName(message)} to node {connectionId} failed with error{StringFromError(errorAsByte)}"; return false; } return true; }
public static MessageSecurity GetSecurity( ChannelIndex index ) { return INTERNAL_CHANNEL_SECURITY[(int)index.GetIndex()]; }