protected override void OnReceive(ClusterMessageType type)
{
switch (type)
{
case ClusterMessageType.Publish:
var appId = InputBuffer.Reader.Read7BitValue();
var streamName = InputBuffer.Reader.ReadString();
Logger.INFO(appId + ":Publish:" + streamName);
var streamType = InputBuffer.Reader.ReadUInt64();
var streamId = InputBuffer.Reader.Read7BitValue();
var chunkSize = InputBuffer.Reader.Read7BitValue();
var publishType = InputBuffer.Reader.ReadString();
var streamManager = GetRoom(appId).StreamsManager;
var getWaitings = streamManager.GetWaitingSubscribers(streamName, streamType).ToArray();
if (getWaitings.Length>0)
{
var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
InStreams[streamId] = inStream;
foreach (var pBaseOutStream in getWaitings)
{
pBaseOutStream.Link(inStream);
}
}
else
{
if (publishType == "append" || publishType == "record")
{
var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
InStreams[streamId] = inStream;
streamManager.CreateOutFileStream(this, inStream, publishType == "append");
}
else
Send(ClusterMessageType.NoSubscriber, o =>
{
o.Write7BitValue(appId);
o.Write(streamName);
});
}
break;
default:
base.OnReceive(type);
break;
}
}