public NettyNetwork(string address, int port) { this.Address = address; this.Port = port; this.Id = IdCreator.CreateNetworkId(); MessageBinder.Bind <HeartbeatAdapter>(HEART_BEAT_RPC_FLAG); }
public override void ChannelRead(IChannelHandlerContext context, object message) { var byteBuffer = message as IByteBuffer; if (byteBuffer == null) { return; } try { var messageId = byteBuffer.GetInt(0); var rpcId = byteBuffer.GetInt(4); var senderType = (SenderType)byteBuffer.GetByte(8); const int headerSize = sizeof(int) * 2 + sizeof(byte); var messageStr = byteBuffer.ToString(byteBuffer.ReaderIndex + headerSize, byteBuffer.ReadableBytes - headerSize, Encoding.UTF8); if (senderType == SenderType.FeedbackSender) { var callContext = RemoveCallAwaiter(context, rpcId); if (callContext == null) { return; } var messageType = callContext.MessageType; if (messageType == typeof(string)) { var messageObj = messageStr; callContext.SetResult(messageObj); } else { try { var messageObj = JsonConvert.DeserializeObject(messageStr, messageType); callContext.SetResult(messageObj); } catch (Exception ex) { callContext.SetResult(null); Console.WriteLine($"MessageId:{messageId} MessageType:{messageType.Name} ReceiveMessage:{messageStr} Exception:{ex}"); } } } else { var channelContext = DequeueChannelContext(); channelContext.SetContext(this, context, messageId, rpcId, senderType); var messageType = MessageBinder.GetMessageType(messageId); var adapter = MessageBinder.GetAdapter(messageId); if (messageType == typeof(string)) { var messageObj = messageStr; adapter.DispatchAdapter(channelContext, messageObj); } else { try { var messageObj = JsonConvert.DeserializeObject(messageStr, messageType); adapter.DispatchAdapter(channelContext, messageObj); } catch (Exception ex) { Console.WriteLine($"MessageId:{messageId} MessageType:{messageType.Name} ReceiveMessage:{messageStr} Exception:{ex}"); } } } } catch (Exception ex) { Console.WriteLine(ex); DisconnectAsync(context).Wait(); } finally { try { ReferenceCountUtil.Release(byteBuffer); } catch (Exception ex) { Console.WriteLine(ex); } } }