public async Task Send(IPCMessage.IIPCMessage msg, CancellationToken cancellationToken) { RawIPCMessage rawMsg = new RawIPCMessage { MessageName = msg.MessageName, Contents = msg.Encode() }; await upStream.Write(rawMsg, cancellationToken).ConfigureAwait(false); }
public async Task Write(RawIPCMessage msg, CancellationToken cancellationToken) { string[] texts = new string[] { msg.MessageName }; byte[] dataBytes = encoding.GetBytes(string.Join("\u001F", texts.Concat(msg.Contents)) + '\u001E'); await BaseStream.WriteAsync(dataBytes, 0, dataBytes.Length, cancellationToken).ConfigureAwait(false); await BaseStream.FlushAsync(cancellationToken).ConfigureAwait(false); }
public static IPCMessage.IIPCMessage FromRawIPCMessage(RawIPCMessage rawmsg) { IPCMessage.IIPCMessage ret; switch (rawmsg.MessageName) { case "Chat": ret = new IPCMessage.ChatIPCMessage(); break; case "ChannelList": ret = new IPCMessage.ChannelListIPCMessage(); break; case "ChannelSelect": ret = new IPCMessage.ChannelSelectIPCMessage(); break; case "CurrentChannel": ret = new IPCMessage.CurrentChannelIPCMessage(); break; case "Time": ret = new IPCMessage.TimeIPCMessage(); break; case "Close": ret = new IPCMessage.CloseIPCMessage(); break; case "SetChatOpacity": ret = new IPCMessage.SetChatOpacityIPCMessage(); break; case "Command": ret = new IPCMessage.CommandIPCMessage(); break; default: throw new IPCMessage.IPCMessageDecodeException("不明なMessageNameです: " + rawmsg.ToString()); } ret.Decode(rawmsg.Contents); return(ret); }