internal MessageSender(MsgType type, string message, Metro.Api.Station srource, Blocked blocked)
 {
     _type    = type;
     _msg     = message == null ? "" : message;
     _srcMsg  = srource;
     _blocked = blocked;
 }
예제 #2
0
        public Station(string flowID, string name, Emitter emitter)
        {
            Name   = name;
            FlowID = flowID;
            _stMsg = new Metro.Api.Station {
                Id = flowID, Name = name
            };
            _internalEmitter = emitter;
            _externalEmitter = new Emitter()
            {
                { EventType.Signaled, delegate {} },
                { EventType.Linked, delegate {} },
                { EventType.Blocked, delegate {} },
                { EventType.Closed, delegate {} }
            };
            _blocked  = new Blocked();
            _grabbeds = new GrabbedSet();

            emitter[EventType.Signaled] += _filter(EventType.Signaled, MsgType.Signal);
            emitter[EventType.Linked]   += _filter(EventType.Linked, MsgType.Link);
            emitter[EventType.Blocked]  += _filter(EventType.Blocked, MsgType.Block);
            emitter[EventType.Closed]   += _filter(EventType.Closed);
        }
            public async Task To(StationDesc destination)
            {
                var cli    = RouterConn.Client;
                var dstMsg = new Metro.Api.Station {
                    Name = destination.Name, Image = destination.Image
                };

                switch (_type)
                {
                default: break;

                case MsgType.Signal:
                {
                    var req = new Metro.Api.TransmitRequest {
                        Token = Token.Create(), Src = _srcMsg, Dst = dstMsg, Message = _msg
                    };
                    var res = await RouterConn.Client.TransmitAsync(req);

                    switch (res.Code)
                    {
                    case 200: return;

                    case 403: throw new NotPermittedException(destination);

                    case 404: throw new ImageNotFoundException(destination);

                    default: throw new UnmanagedStatusCodeException(res.Code);
                    }
                }

                case MsgType.Link:
                {
                    var req = new Metro.Api.LinkRequest {
                        Token = Token.Create(), Src = _srcMsg, Dst = dstMsg, Message = _msg
                    };
                    var res = await RouterConn.Client.LinkAsync(req);

                    switch (res.Code)
                    {
                    case 200: return;

                    case 404: throw new ImageNotFoundException(destination);

                    default: throw new UnmanagedStatusCodeException(res.Code);
                    }
                }

                case MsgType.Block:
                {
                    _blocked.Add(destination);
                    var req = new Metro.Api.BlockRequest {
                        Token = Token.Create(), Src = _srcMsg, Dst = dstMsg, Message = _msg
                    };
                    var res = await RouterConn.Client.BlockAsync(req);

                    switch (res.Code)
                    {
                    case 200: return;

                    case 404: throw new ImageNotFoundException(destination);

                    default: throw new UnmanagedStatusCodeException(res.Code);
                    }
                }
                }

                return;
            }
예제 #4
0
 public StationDesc(Metro.Api.Station station) : this(
         flowID : station.Id,
         name : station.Name,
         image : station.Image)
 {
 }
예제 #5
0
 public static Boolean TryDel(Metro.Api.Station station) => TryDel(station.Id, station.Name);
예제 #6
0
 public static void Del(Metro.Api.Station station) => TryDel(station);
예제 #7
0
 public static Boolean TryGet(Metro.Api.Station station, out StationBody body) => TryGet(station.Id, station.Name, out body);
예제 #8
0
 public static Boolean Has(Metro.Api.Station station) => Has(station.Id, station.Name);
예제 #9
0
 public static StationBody Create(Metro.Api.Station station) => Create(station.Id, station.Name);
예제 #10
0
 private static StationBody createStationBody(Metro.Api.Station station) => createStationBody(station.Id, station.Name);