private UpDevice DoHandshake(NetworkDevice device) { try { // Create a Dummy device just for calling it logger.Log("Trying to handshake with device : " + device.networkDeviceName); UpDevice dummyDevice = new UpDevice(device.networkDeviceName); dummyDevice.AddNetworkInterface(device.networkDeviceName, device.networkDeviceType); Call call = new Call(DEVICE_DRIVER_NAME, "handshake", null); call.AddParameter("device", Json.Serialize(currentDevice.ToJSON())); Response response = gateway.CallService(dummyDevice, call); if ((response != null) && string.IsNullOrEmpty(response.error)) { // in case of a success greeting process, register the device in the neighborhood database object responseDevice = response.GetResponseData("device"); if (responseDevice != null) { UpDevice remoteDevice; if (responseDevice is string) { remoteDevice = UpDevice.FromJSON(Json.Deserialize(responseDevice as string)); } else { remoteDevice = UpDevice.FromJSON(responseDevice); } RegisterDevice(remoteDevice); logger.Log("Registered device " + remoteDevice.name); return(remoteDevice); } else { logger.LogError( "Not possible complete handshake with device '" + device.networkDeviceName + "' for no device on the handshake response."); } } else { logger.LogError( "Not possible to handshake with device '" + device.networkDeviceName + (response == null ? ": No Response received." : "': Cause : " + response.error)); } } catch (System.Exception e) { logger.Log(e.StackTrace); logger.LogError("Not possible to handshake with device '" + device.networkDeviceName + "'. " + e.Message); } return(null); }
public void Handshake(Call serviceCall, Response serviceResponse, CallContext messageContext) { string deviceParameter = serviceCall.GetParameterString(DEVICE_KEY); if (deviceParameter == null) { serviceResponse.error = "No 'device' parameter informed."; return; } try { UpDevice device = UpDevice.FromJSON(Json.Deserialize(deviceParameter)); gateway.deviceManager.RegisterDevice(device); serviceResponse.AddParameter(DEVICE_KEY, Json.Serialize(gateway.currentDevice.ToJSON())); //TODO: actually implement the driver register for other devices... //Response driversResponse = gateway.CallService(device, new Call("uos.DeviceDriver", "listDrivers")); //object driverList = driversResponse.GetResponseData("driverList"); //if (driverList != null) //{ // var driverMap = (IDictionary<string, object>)Json.Deserialize(driverList.ToString()); // // TODO: this is duplicated with DeviceManager.registerRemoteDriverInstances // foreach (string id in driverMap.Keys) // { // UpDriver upDriver = UpDriver.FromJSON(Json.Deserialize(driverMap[id].ToString())); // DriverModel driverModel = new DriverModel(id, upDriver, device.name); // gateway.driverManager.Insert(driverModel); // } //} } catch (System.Exception e) { serviceResponse.error = e.Message; logger.LogError("Problems on handshake: " + e.Message + "," + e.StackTrace); } }